Windowsでバッチファイルを作る時、結果をログとして残したいときがよくあります。
そのログファイルに日付や時刻を付加するとあとで見直すときに役立つので、バッチファイル内で日付や時刻を取得して、それをファイル名に利用する方法をメモっておきます。
日付と時刻は環境変数に用意されています
実は日付と時刻はWindowsの環境変数に用意されています。
C:\> eccho %date% 2017/09/10 C:\> echo %time% 16:02:09.68
もちろん、環境境変数をechoなどで表示した時の日付と時刻が設定されています。
これをバッチファイル内で利用すればいいのですが、そのままだと使えません。なぜならファイル名に使えない「/(スラッシュ)」とか「:(コロン)」が含まれているからです。
日付と時刻の文字列を加工する
Windowsのバッチファイルでは文字列を抽出するコマンド(というか記述方法)が用意されています。
具体的には、ある文字列Sの左端からm番目の文字からn番目の文字を抜き出すときには「%S:~m,n%」という記述方法で抜き出します。ここでmは0から数えます。
また、mを省略した時は文字列の先頭からn文字まで、nを省略したときはm文字から右端までとなります。
例えば、ABCDEFという文字列SからBCDを取り出したいときは、「%S:~1,3%」となります。
C:\> set S=ABCDEF C:\> echo %S:~1,3% BCD
これをバッチファイル内で日付と時刻の環境変数に合わせて抜き出せばいい感じで取得できます。
まずは日付から。日付は「2017/09/10」という形式なので、これを「20170910」にしてみます。取り出し方は以下の通り。
- 年:先頭から4文字
- 月:先頭から6文字目から2文字
- 日:先頭から9文字目から2文字
実際に記述すると「%date:~0,4%%date:~5,2%%date:~8,2%」となります。
C:\> echo %date:~0,4%%date:~5,2%%date:~8,2% 20170910
次は時間です。時間は「16:02:09.68」という形式なので、これを秒未満は切り捨てて「160209」にしてみます。取り出し方は以下の通り。
- 時:先頭から2文字
- 分:先頭から4文字目から2文字
- 秒:先頭から7文字目から2文字
実際に記述すると「%time:~0,2%%time:~3,2%%time:~6,2%」となります。
C:\> echo %time:~0,2%%time:~3,2%%time:~6,2% 160209
さて、これでバッチファイルを作りたいところなのですが、時間の場合はもうひとつやることがあります。この%time%、時間が午前0時から9時59分まで、つまり時刻が一桁の場合は空白文字になってしまいます。
C:\> time 1:20 →時刻を1時20分に設定 C:\> echo %time% 1:20:03.45 C:\> time 12:20 →時刻を12時20分に設定 C:\> echo %time% 12:20:02.12
なので、空白文字があったらそれを置換する必要があります。
幸い、これも記述方法が用意されていまして「%S:s1=s2%」という書き方をすると、文字列Sに含まれるs1をs2に置換することができます。
実際の書き方としては、以下のとおりです。
C:\> time 1:20 →時刻を1時20分に設定 C:\> set tm=%time: =0% →%time%の空白を0に置換する C:\> echo %tm% 01:20:08.40 echo %tm:~0,2%%tm:~3,2%%tm:~6,2% 012008
以上で日付と時刻をファイル名でつかえる形にすることができました。
バッチファイル内で日付と時刻の文字列を利用する
では、実際にバッチファイル内で日付と時刻の文字列を利用してログファイルを作ってみましょう。ファイル名はYYYYMMDD_HHMMSS.logになるようにします。
C:\> type logfile.bat @echo off set dt=%date% set tm=%time: =0% set FileName=%dt:~0,4%%dt:~5,2%%dt:~8,2%_%tm:~0,2%%tm:~3,2%%tm:~6,2%.log echo %FileName% C:\> logfile.bat 20170910_012506.log
これでバッチファイル内で日付と時刻が含まれたファイル名を作成することができました。バックアップのログファイルなどで利用できると思います。
自分でよく使うんですが、書き方を忘れてしまうのでメモっておきました。
追記:コマンドプロンプトで日付や時刻を変更する時には、管理者権限が必要になります。プログラムにある「コマンドプロンプト」を右クリックして「」を選択すると変更できるようになります。
コメント