Windowsのバッチ処理でファイル名に日付を付加する方法

2019年7月15日

バッチ処理を作っていると処理内で出力するファイル名に日付と時刻を付けたいケースが良くあります。

例えば、「file01_20190211_213012.csv」といった具合です。

ファイル名に日付をつけるメリットとしては、

・作成された日時が分かる。
・同じ処理を実行してもファイル名に日付と時刻が付加されているため上書きされない
などです。

ではどうやれば日付と時刻をファイル名に付加できるのか説明します。

 

目次

1.日付と時刻を取得する

まず、実行した時点の日付と時刻を取得して変数にセットします。

1)日付の取得方法

日付はシステムが用意した特別な変数「%date%」に格納されています。

これを変数にセットします。

SET HIZUKE=%date%

 

これで変数「HIZUKE」に日付がセットされました。

セットされた値を確認するためechoで表示させてみましょう。

C:\>SET HIZUKE=%date%

C:\>echo %HIZUKE%
2019/02/11

 

スポンサードサーチ

2)時刻の取得方法

つぎに時刻を取得する方法です。

日付同様時刻も特殊変数「%time%」に実行時点の時刻が格納されています。

これを変数にセットすればいいのですが、一つ注意することがあります。

「時:分:秒」のうち「時」については0時~9時は数字1桁になってしまいます。

例えば朝の6時30分00秒は「□6:30:00」となります。(□は空白です)

このままではファイル名としては不都合がありますので先頭の空白を「0」に置き換える必要があります。

具体的には以下のように記述して時刻を取得しつつ空白を0に置き換えます。

set JIKOKU=%time: =0%

こうすることで先頭が空白になることを回避できます。

C:\>SET JIKOKU=%time: =0%

C:\>echo %JIKOKU%
09:28:42.45

 

スポンサードサーチ

3.取得した日付と時刻を分解してファイル名として結合する

これで日付と時刻が取得できました。と、思いきや、よく見ると日付は区切りとして「/」が、時刻も「:」や「.」が入っています。

このままファイル名にしてはエラーになりますので必要な文字だけを部分参照で切り出します。

部分参照の説明は以下の記事を参照してください。

Windowsのバッチコマンドで文字列の部分参照(切り出し)を行う方法

年、月、日、時、分、秒のそれぞれ2桁ずつを変数に取り出して結合してファイル名にします。

以下が完成したバッチファイルです。

@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%

 

このサンプルでは最終行でファイルを作成しています。

ファイル名に秒まで付加していますが必要に応じてアレンジしてみてください。