- ベストアンサー
Windows2000環境でのバッチファイルにおける日付取得の問題
- Windows2000環境においてバッチファイルで日付を取得する際に予期せぬ結果が起きることがあります。
- 特に、【DATE】コマンドを使用して日付を取得する場合、取得される値に一部の情報が欠落することがあります。
- これは、Windows2000のDOSプロンプトにおいて【DATE】コマンドが曜日と日付の間にスペースを挟んで表示されるためです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.3です。Windows2000のfor /Fということで直感的に日本語のバグを思い出したので確認なしに回答しましたが、おっしゃるとおり漢字は1文字なのでおかしいですね。 改めてvmware上のWindows2000 serverで確認しましたが、やはり YYYY/MM/D と一文字だけかける結果となり、こちらの環境では YYYY/MM にはなりませんでした。ご参考まで。
その他の回答 (3)
- pita-gora
- ベストアンサー率70% (102/145)
Windows2000のfor文にはバグがあり、in( )の中で全角文字を使うと文字数分後ろが削られます。 以下のリンク先を参照してください。 http://fpcu.on.coocan.jp/dosvcmd/bbs/log/cat3/for_in_do/4-0138.html http://fpcu.on.coocan.jp/dosvcmd/bbs/log/cat3/for_in_do/3-0471.html for 文が実行される時点で、echo %DATE% の%DATE%部分が展開されて実行されるため、 そこに含まれる曜日の全角文字が上記バグに引っかかるわけです。 %DATE%を環境変数TEST1に代入するのですから、バグのあるfor文を使わずに set TEST1=%DATE:~-10% などほかの方法で書くしかないでしょう。
こちらで試したところ、次のようになりました。 Win7Home64bit: 2010/09/19 Win2000ProSP4(VirtualPC2007): 日 となり、7では意図通りだが2000はまた違う現象で、次の修正をかけるとうまくいきました。(2案あります) 1)FOR /F "tokens=3 delims= " %%i in ('ECHO %DATE%') do SET TEST1=%%i 2)FOR /F "tokens=3" %%i in ('ECHO %DATE%') do SET TEST1=%%i もしECHO %DATE%の実行結果が初めからそうなっていたら、これはどうにもなりませんけど。そうでなければ2)の、delimsパラメータの削除で何とかなりませんかね?こちらでのECHO %DATE%の実行結果はなぜか、日 2010/09/19となります(頭に「日 」がつく)。
- notnot
- ベストアンサー率47% (4900/10358)
後半の質問文が矛盾してます。 >~コード開始~ >REM 日付取得 >FOR /F "tokens=2 delims= " %%i in ('ECHO %DATE%') do SET TEST1=%%i >ECHO %TEST1% >~コード終了~ コードはECHO %DATE%と書いてありますが、その下には、 >上記コードはWindows2000環境のDOSプロンプトにて【DATE】コマンドを実行すると >【曜日 YYYY/MM/DD】が表示されるのを利用しております。 「DATEコマンドを実行」と書いてあります。どちらが正しいのでしょう? コードの方が正しいとすると、tokens=2でのfor文を書くと、ECHO %DATE% は1トークンしかないので、その出力結果はスキップされます。つまり >FOR /F "tokens=2 delims= " %%i in ('ECHO %DATE%') do SET TEST1=%%i の、SET TEST1=%%i は一度も実行されないので、TEST1の値はその前のままです。上記FOR/Fの実行前の時点で、TEST1はYYYY/MMであったはずで、そのまま表示されたと言うことです。
補足
ご回答ありがとうございます。 ただ、ご提示の情報に基づくと納得がいかない1点あります。 それは、全角文字である曜日の1文字がバグに引っかかるのであれば 削除されるのは【D】の1文字だけのはずです。 なぜ【DD】と1文字ではなく2文字削除されるのでしょうか? もしかして【D】1文字は半角だから、【全角1文字=半角2文字】と いう感じで削除されているのでしょうか? そうであれば確かに納得です。