Code Aquarium

minazoko's blog -*- 水底のブログ -*-

(BAT)バッチで年月日時分秒

Windowsのバッチスクリプトで年月日時分秒を表す数列を得る方法。
ファイルのバックアップ時などに欲しくなることあるよね。

日付は環境変数DATEで取得できます。

> echo %DATE%
2014/07/09

変数名の後にコロン+チルダを書いてその後ろにスライスする要素の先頭インデックスと切り取る長さを指定

> echo %DATE:~0,4%
2014

> echo %DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
20140709

置換を使う。
コロンの後に置換指定もできる。/ を何かに置換するならこんな感じ。

> echo %DATE:/=-%
2014-07-09

> echo %DATE:/=%
20140709

時刻も同様に。環境変数TIMEから、コロンを除去する。

> echo %TIME::=%
203341.31

おっと、秒未満があるのか。

> set NOW=%TIME::=%
> echo %NOW:~0,6%
203648

ワンライナーは無理かな~。

両方まとめると。

> set NOW=%DATE:/=%%TIME::=%
> echo %NOW:~0,14%
20140709204243

以上。わりと今更な小ネタでした。

追記

無理やりワンライナー
forコマンドでデリミタ指定の文字列分割できるのを利用してドットの前を取り出す。

> for /F "delims=." %a in ('echo %DATE:/=%%TIME::=%') do echo %a
20140709210901

変数にバインドしたければ

> for /F "delims=." %a in ('echo %DATE:/=%%TIME::=%') do SET NOW=%a
> echo %NOW%
20140709210901