バッチファイルで YYMMDD_HHMMSS みたいな現在日付時刻文字列をつくる
ファイル名に日付時刻文字列を入れたい場合などに重宝する。
バッチファイル実装
以下のようにする。
@echo off setlocal set shortdate=%date:/=% set shortdate=%shortdate:~2,6% set time_0padding=%time: =0% set shorttime=%time_0padding::=% set shorttime=%shorttime:~0,6% set shortdatetime=%shortdate%_%shorttime% echo %shortdatetime%
最終的に欲しいのは %shortdatetime%
変数。それ以外は導出過程。
解説
一言で言うと、環境変数の date と time から日付時刻文字列を取り出し、それを(色々と文字列処理を工夫して) YYMMDD_HHMMSS フォーマットに変更している。
現在日付時刻の取り方
環境変数 %date%
と %time%
で取れる。
$ echo %date% 2018/07/23 $ echo %time% 16:35:06.57
ただし %time%
は時(Hour)が一桁の時に 09
ではなく 9
みたいなスペース埋めであり、使いづらいので、 置換記法でスペースを0に置換させる。
$ echo %time% 9:12:34.56 $ echo %time: =0% 09:12:34.56
置換記法
%date:/=%
これは date 変数中にある「/」を空文字列に置換する、つまり削除するという意味。
以下に例を示す。
$ echo %date% 2018/07/25 $ echo %date:/=% 20180725
一般論で書くと以下のようなフォーマットになる。
%変数名% ↓ こう書く %変数名:置換前の文字=置換後の文字%
スライス記法
%shortdate:~2,6%
これは shortdate 変数中にある2文字目から6文字分を取り出す、という意味。
以下に例を示す。
$ echo %date% 2018/07/23 $ echo %date:~0,4% 2018 $ echo %date:~5,2% 07 $ echo %date:~8,2% 23