Windowsでbatファイルを作る際、ファイル名に日付や時刻を入れたい時があると思います。
そのため、今回はDOSコマンドで日付や時刻を取得する方法を解説していきたいと思います。
#日付と時刻を取得する(環境変数「date」と「time」)
日付を取得するには「date」、時刻を取得するには「time」を使用します。「date」と「time」はWindowsの環境変数であり、既に現在の日付と時刻が格納されています。
これをバッチ内に記載すれば日付と時刻を取得してくれます。
@echo off
rem 現在日付
echo %date%
rem 現在時刻
echo %time%
コマンドプロンプト上での実行結果は下記の通りです。
c:\>sample.bat
2021/09/06
19:20:14.73
#日付のフォーマットをyyyymmdd形式に変更する
ハイフンを削除するなど、日付のフォーマットを変更したい場合は、取得した日付文字を置換することで実現します。
@echo off
rem 「date」から切り出した数字をそれぞれ変数に代入
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set date2=%year%%month%%day%
echo %date2%
4行目から6行目で、変数「date」から必要な部分だけを切り取り、それぞれ年「YYYY」、月「MM」、日「DD」に代入しています。文字列の切り取りの基本は以下のような形式で書きます。
%[変数]:~[飛ばす文字数],[切り取る文字数]%
例えば、4行目の「YYYY」であれば、0文字飛ばし(つまり何も飛ばさず初めの文字から)、1文字目から4文字分を切り取るという指示になっています。
実行結果は下記の通りです。
c:\>sample2.bat
20210906
#時刻のフォーマットをHHMMSS 形式に変更する。
同じように、時間は「19:20:14.73」という形式なので、これを秒未満は切り捨てて時刻のフォーマットをHHMMSS 形式に変更することが出来ます。
@echo off
set time2=%time: =0%
rem 「time」から切り出した数字をそれぞれ変数に代入
set hour=%time2:~0,2%
set minute=%time2:~3,2%
set second=%time2:~6,2%
set time3=%hour%%minute%%second%
echo %time3%
実行結果は下記の通りです。
c:\>sample3.bat
192014
#ファイル名に日付の文字列を追加して出力する
最後に、バッチファイル内で日付と時刻の文字列を利用してログファイルを作ってみましょう。ファイル名はYYYYMMDD.logになるようにします。
@echo off
set time2=%time: =0%
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set hour=%time2:~0,2%
set minute=%time2:~3,2%
set second=%time2:~6,2%
set filename=%year%-%month%%date%-%hour%%minute%%second%
echo test >> %logname%.log
#まとめ
バッチファイル内で環境変数「date」と「time」を使うことで、日付と時刻が含まれたファイル名を作成することが出来ます。バックアップのログファイルなどを作成する際は、本記事を参考にして頂ければ幸いです。