![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
バッチファイル DOS Windows2000環境での日付取得
いつもお世話になります。
Windows2000環境にて当日日付を取得する下記のバッチファイルがあります。
~コード開始~
REM 日付取得
FOR /F "tokens=1 delims= " %%i in ('DATE /t') do SET TEST1=%%i
ECHO %TEST1%
~コード終了~
上記プログラム結果は【YYYY/MM/DD】となります。
※YYYY:当年 MM:当月 DD:当日
上記コードはWindows2000環境のDOSプロンプトにて【DATE /t】コマンドを実行すると
【YYYY/MM/DD 曜日】が表示されるのを利用しております。
結果的にスペース区切りで1節目の【YYYY/MM/DD】だけを抜き取っております。
これは問題ありませんでした。
しかし、下記コードで実行した所、意図した結果と異なるものになりました。
~コード開始~
REM 日付取得
FOR /F "tokens=2 delims= " %%i in ('ECHO %DATE%') do SET TEST1=%%i
ECHO %TEST1%
~コード終了~
上記プログラム結果は【YYYY/MM/】となってしまい、【DD】が抜けておりました。
※YYYY:当年 MM:当月 DD:当日
上記コードはWindows2000環境のDOSプロンプトにて【DATE】コマンドを実行すると
【曜日 YYYY/MM/DD】が表示されるのを利用しております。
結果的にスペース区切りで2節目の【YYYY/MM/DD】だけを抜き取る予定でしたが
見ての通り予想外の結果です。
この現象はなぜでしょうか?
何が起因して【DD】が表示されないのでしょうか?
他に当日日付の取得方法はいくつか知っていますが、
上記プログラムで取得したいのです。
どなたかご存知の方がいらっしゃればご教授願いませんでしょうか?
以上、何卒宜しくお願い致します。
No.4ベストアンサー
- 回答日時:
No.3です。
Windows2000のfor /Fということで直感的に日本語のバグを思い出したので確認なしに回答しましたが、おっしゃるとおり漢字は1文字なのでおかしいですね。改めてvmware上のWindows2000 serverで確認しましたが、やはり YYYY/MM/D と一文字だけかける結果となり、こちらの環境では YYYY/MM にはなりませんでした。ご参考まで。
No.3
- 回答日時:
Windows2000のfor文にはバグがあり、in( )の中で全角文字を使うと文字数分後ろが削られます。
以下のリンク先を参照してください。
http://fpcu.on.coocan.jp/dosvcmd/bbs/log/cat3/fo …
http://fpcu.on.coocan.jp/dosvcmd/bbs/log/cat3/fo …
for 文が実行される時点で、echo %DATE% の%DATE%部分が展開されて実行されるため、
そこに含まれる曜日の全角文字が上記バグに引っかかるわけです。
%DATE%を環境変数TEST1に代入するのですから、バグのあるfor文を使わずに
set TEST1=%DATE:~-10%
などほかの方法で書くしかないでしょう。
参考URL:http://fpcu.on.coocan.jp/dosvcmd/bbs/log/cat3/fo …
この回答への補足
ご回答ありがとうございます。
ただ、ご提示の情報に基づくと納得がいかない1点あります。
それは、全角文字である曜日の1文字がバグに引っかかるのであれば
削除されるのは【D】の1文字だけのはずです。
なぜ【DD】と1文字ではなく2文字削除されるのでしょうか?
もしかして【D】1文字は半角だから、【全角1文字=半角2文字】と
いう感じで削除されているのでしょうか?
そうであれば確かに納得です。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_06.png?5a7ff87)
No.2
- 回答日時:
こちらで試したところ、次のようになりました。
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となります(頭に「日 」がつく)。
No.1
- 回答日時:
後半の質問文が矛盾してます。
>~コード開始~
>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であったはずで、そのまま表示されたと言うことです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 09:24
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 11:02
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/01/23 17:13
- Access(アクセス) エクセルのVBAについて教えてください。 4 2023/01/21 10:21
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Access(アクセス) Accessのデータ型の日付/時刻型について 1 2023/04/02 17:03
- JavaScript gasについて 1 2022/05/31 21:51
- Visual Basic(VBA) テーブルを配列に入れて、元のテーブルの行番号を取得したい 1 2022/08/16 20:15
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
- Excel(エクセル) Excel 数行を1組とする300組ほどあるデータの項目を揃えたいです。 3 2023/01/26 19:38
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Pythonって何のソフトで動くん...
-
エクセルVBA、ステップモードと...
-
Excel実行時エラー-2146959355?
-
latexでのエラー
-
eclipseで、「ポート番号が使用...
-
pythonで他のアプリを操作する...
-
パソコンのスクリーンセーバー...
-
EXCEL-VBAでコマンド...
-
JCL(再始動)
-
パソコンに何かが勝手にダウン...
-
プログラムが書けません。
-
VBA 作成中のプログラムを使っ...
-
VB.NETでDataTableにデータ追加...
-
USBメモリを挿しただけで無確認...
-
VB.NETでボタンのクリックイベ...
-
UbuntuのQtでビルドして配布す...
-
シングルステップの使用方法に...
-
VB.NETを実行するにはどうした...
-
プログラミングについてです。...
-
アクセス権が拒否されました は...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パソコンに何かが勝手にダウン...
-
パソコンのスクリーンセーバー...
-
Excel実行時エラー-2146959355?
-
chatGPTで次々と質問をしていく...
-
PC版のMinecraftが応答なしにな...
-
VSコード
-
プログラミングについてです。...
-
latexでのエラー
-
VB.NETでボタンのクリックイベ...
-
管理者として実行を毎回すると...
-
エクセルVBA、ステップモードと...
-
Windows10 で青鬼を遊びたいの...
-
EXCEL-VBAでコマンド...
-
eclipseで、「ポート番号が使用...
-
プログラム実行中に強制停止さ...
-
VB.NETでDataTableにデータ追加...
-
pythonで他のアプリを操作する...
-
COBOLで集団項目から符号...
-
実行中のVBSをタスクバーに非表...
-
C言語再帰アルゴリズム
おすすめ情報