DOSバッチで日付・時刻の取得
DOSバッチを書いているとログを日付・時刻入りで出力したくなります。
xxxxx_20071123_06000102.log
というログとか。
基本的には環境変数の、%date% と %time% の文字列操作をすれば出来るのですが、
%time% がちょっと曲者です。
%time% は、 20:00 など時間が二桁の場合は良いのですが、 2:00 など時間が
一桁の場合は ' 2:00' という半角スペース付きで返してくれます。
>echo %time% 2:00:18.54
そこで %time% に対して文字列操作して、半角スペースを0に置換します。
>echo %time: =0%
あとは、時刻文字列の切り貼りをすればOK。
>set time_tmp=%time: =0% >set time_tmp=%time_tmp:~0,2%%time_tmp:~3,2%%time_tmp:~6,2%%time_tmp:~9,2% >echo %time_tmp% 02474721
で、よく使いそうなのでバッチ化してみました。test.batは呼出しのサンプルです。
datetime.bat
このバッチを実行すると環境変数に日付・時刻が保存されます。
%yyyy% 年4桁
%yy% 年2桁
%mm% 月
%dd% 日
%hh% 時
%mi% 分
%ss% 秒
%sss% ミリ秒2桁
%datetime% 年4桁〜ミリ秒2桁
@echo off set date_tmp=%date:/=% set time_tmp=%time: =0% set yyyy=%date_tmp:~0,4% set yy=%date_tmp:~2,2% set mm=%date_tmp:~4,2% set dd=%date_tmp:~6,2% set hh=%time_tmp:~0,2% set mi=%time_tmp:~3,2% set ss=%time_tmp:~6,2% set sss=%time_tmp:~9,2% set datetime=%yyyy%%mm%%dd%%hh%%mi%%ss%%sss% set time_tmp= set date_tmp=
test.bat
datetime.bat の実行用サンプルです。
@echo off setlocal call datetime.bat echo %datetime% echo %yyyy%-%mm%-%dd% %hh%:%mi%:%ss%.%sss% echo %date% %time% endlocal
実行してみる。
>test.bat 2007112302443090 2007-11-23 02:44:30.90 2007/11/23 2:44:30.92
注.datetime.bat は、実行した時点の %date% %time% の内容を環境変数に保存しているので、再実行するまで日時は更新されないです。