【Windowsバッチ】ファイル名に日付をつけて出力する方法
バッチ処理を作っていると処理内で出力するファイル名に日付と時刻を付けたいケースが良くあります。
例えば、「file01_20190211_213012.csv」といった具合です。
ファイル名に日付をつけるメリットとしては、
・作成された日時が分かる。
・同じ処理を実行してもファイル名に日付と時刻が付加されているため上書きされない
などです。
ではどうやれば日付と時刻をファイル名に付加できるのか説明します。
1.日付と時刻を取得する
まず、実行した時点の日付と時刻を取得して変数にセットします。
1)日付の取得方法
日付はシステムが用意した特別な変数「%date%」に格納されています。
これを変数にセットします。
SET HIZUKE=%date%
これで変数「HIZUKE」に日付がセットされました。
セットされた値を確認するためechoで表示させてみましょう。
C:\>SET HIZUKE=%date%
C:\>echo %HIZUKE% 2024/12/02
C:\>
スポンサードサーチ
2)時刻の取得方法
つぎに時刻を取得する方法です。
日付同様時刻も特殊変数「%time%」に実行時点の時刻が格納されています。
これを変数にセットすればいいのですが、一つ注意することがあります。
「時:分:秒」のうち「時」については0時~9時は数字1桁になってしまいます。
例えば朝の6時30分00秒は「□6:30:00」となります。(□は空白です)
このままではファイル名としては不都合がありますので先頭の空白を「0」に置き換える必要があります。
具体的には以下のように記述して時刻を取得しつつ空白を0に置き換えます。
set JIKOKU=%time: =0%
こうすることで先頭が空白になることを回避できます。
下記は実行例です。
スポンサードサーチ
3.取得した日付と時刻を分解してファイル名として結合する
ここまでで日付と時刻を取得する方法が理解できたと思います。
しかし、このままファイル名に追加すると日付と時刻には「/」や「:」や「.」が入っています。
このまま結合してファイル名にすると使用できない文字が含まれているためエラーになります。
必要な文字だけを部分参照で切り出します。
部分参照の説明は以下の記事を参照してください。
年、月、日、時、分、秒のそれぞれ2桁ずつを変数に取り出して結合してファイル名にします。
下記を「SAMPLE.bat」とファイル名を付けて保存します。
@echo off
echo 開始 %date% %time%
set HIZUKE=%date: =0%
set JIKOKU=%time: =0%
set yy=%HIZUKE:~0,4%
set mm=%HIZUKE:~5,2%
set dd=%HIZUKE:~8,2%
set hh=%JIKOKU:~0,2%
set mi=%JIKOKU:~3,2%
set ss=%JIKOKU:~6,2%
echo TEST > c:\temp\file01_%yy%%mm%%dd%_%hh%%mi%%ss%.txt
このサンプルでは最終行でファイルを作成しています。
「SAMPLE.bat」を実行すると出力されたファイルは下記のように日付と時刻が付加されていることが分かります。
ファイル名に秒まで付加していますが必要に応じてアレンジしてみてください。