読者です 読者をやめる 読者になる 読者になる

Corredor

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

今日日付のフォルダを作成する Windows バッチの改善版

この記事の改善版。

neos21.hatenablog.com

前回紹介したバッチは、必ず「YYYYMMDD」形式のフォルダを Md コマンドで作って開こうとするだけのモノだった。

だが、時には作業フォルダの名前を「YYYYMMDD_作業ログ」などのように、「日付 + 名称」としたいときもある。このようにリネームしてからこのバッチを再度叩くと、

  • YYYYMMDD_作業ログ
  • YYYYMMDD

というように、同じ日付のフォルダが複数できてしまう。

これを解消するため、「今日日付を含むフォルダが既に存在すればそれを開く」ように動作を変更した。

どうも ANSI なファイルは gist-it で表示できないっぽいので、以下にコードをコピペしておく。

@Echo Off
Rem 指定のフォルダの配下に今日日付の「YYYYMMDD」フォルダを作成する

Rem ユーザ設定変数
Rem 今日日付のフォルダを作成する親フォルダのパス。「\」で終えること
Set BASE_DIR=C:\Test\

Rem 環境変数より今日日付を取得し「YYYYMMDD」の形式でフォルダ名を作成する
Set TODAY_DIR=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%

Rem 親フォルダに移動する
Pushd %BASE_DIR%

Rem 今日日付を含むフォルダが既に作られていないか確認する
Dir /a:d /b %TODAY_DIR%* > Nul 2>&1

Rem なさそうならフォルダを作成しエクスプローラで開いて終わり
If Not "%ERRORLEVEL%" == "0" (
  Md %TODAY_DIR%
  Start "" "%BASE_DIR%%TODAY_DIR%"
  Exit /b
)

Rem 既に今日日付を含むフォルダがありそうならそれを開く
Rem (複数存在する場合は名前順で最後に登場するフォルダが開く)
For /f "delims=" %%a In ('Dir /a:d /b %TODAY_DIR%*') Do Set DIR_NAME=%%a
Start "" "%BASE_DIR%%DIR_NAME%"
Exit /b

Dir コマンドの結果を見て処理を切り替えるようにした。ERRORLEVEL0 でなければ「指定のフォルダがない」などのエラーになっているので、今日日付のディレクトリを作り、そのディレクトリを開くようにしている。

Dir コマンドが成功していたら、存在するであろうディレクトリ名を取得して開くようにしている。

Start "" "(ディレクトリパス) という書き方は、空白が混じったパスでもエクスプローラを開くためのイディオム。