Windowsのバッチファイルで日付取得するたった一つの冴えたやり方

みなさんCMDつかってますかー!
日本のエンタープライズで働いている限り使わざるを得ないCMDいやいや使うよりかっこよく使いこなしましょう。

CMDで日付(今日だったら20160926)のファイル名を作りたいときとき
Windows環境変数「DATE」の中には日付が入っていますが、スラッシュ含みの形式になっています。2016/09/26といった形式。(環境で異なることがあります)
しかしスラッシュはWindowsのファイルやフォルダ名に使用できないため、スラッシュを取り除く必要があります。

そんなときは

%DATE:/=%

をつかいましょう。

ログに吐くならこんな感じですね。

echo aa >> %DATE:/=%.log

これは日付文字列の「2016/09/26」に対して「/」を「」空文字に置換するという命令です。


ネットで検索すると以下のやり方が主流なようなのだけど、ぱっとみの可読性が低く僕はすきじゃない。

echo %date:~0,4%%date:~5,2%%date:~8,2%

これは「2016/09/26」から0-4文字と5-7文字目と必要な文字を抜き出して知れらを結合しています。
ぜひ上記の文字抜き出しで書いていて可読性を下げているバッチスクリプトがあったら「%DATE:/=%」で書き直してみてはいかがだろうか

ちなみにどちらもちゃんと同じ結果です。もちろん

C:\Users\garapon>echo %DATE:/=%
20160926

C:\Users\garapon>echo %DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
20160926

TIME部分も必要な場合TIMEはミリ秒の区切り文字が異なる為、切り出しをしないといけないのでそれはわるくないとおもいますよ。