Corredor

ウェブ、プログラミングの勉強メモ。

特定のフォルダ配下に今日日付のフォルダを作成する Windows バッチ

日付フォルダを作って作業ログを置いたりする時などに。いちいちフォルダを作って手入力するのも面倒なので自動化。

以下のようなバッチファイル (.bat ファイル) を作って実行する。

@Rem 「BASE_DIR」で指定したフォルダの配下に今日日付の「YYYYMMDD」フォルダを作成する
Set BASE_DIR=D:\Test\
Set TODAY=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
Mkdir %BASE_DIR%%TODAY%

軽く説明。

  • Set コマンドで変数定義ができる。= の前後にスペースを入れるとそれも文字列として認識されてしまうためスペースを入れない。
  • %DATE% は環境変数。
    • Echo %DATE% すると、大抵は 2016/01/22 と表示されるが、区切り文字が / になるかどうかは環境の言語設定によるみたい。
    • ファイル・フォルダ名に / を使えないため、「YYYYMMDD」なフォルダを作るために、変数の一部分から文字列を抽出している。
    • %変数名:~開始位置,抽出桁数% と書く。開始位置が 0 の場合は 0 を省略できるので、%DATE:~0,4%%DATE:~,4% と書いても問題ない。
    • 4桁取って西暦、区切り文字を飛び越えて5文字目から2桁取ると月、さらに区切り文字を飛び越えて8文字目から2桁取って日、と並べている。
    • 2016-01-21 といったハイフン区切りにしたい場合は、%DATE:/=-% とすれば、変数中の /- に置換する、と書けるが、上述のとおり区切り文字が本当に / なのかは言語設定に依存し、自分の場合はうまく置換できないこともあったので、やるのであれば %DATE:~0,4%-%DATE:~5,2%**-**%DATE:~8,2% とするのがオススメ。
  • Mkdir でフォルダ作成。変数 %BASE_DIR% は末尾に \ を付けてあるので、%TODAY% と並べると D:\Test\20160121 となる。\ マークをココで結合してもいいし、フルパスを変数に入れてから処理しても OK。