今日日付のフォルダを作成する Windows バッチの改善版
この記事の改善版。
前回紹介したバッチは、必ず「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
コマンドの結果を見て処理を切り替えるようにした。ERRORLEVEL
が 0
でなければ「指定のフォルダがない」などのエラーになっているので、今日日付のディレクトリを作り、そのディレクトリを開くようにしている。
Dir
コマンドが成功していたら、存在するであろうディレクトリ名を取得して開くようにしている。
Start "" "(ディレクトリパス)
という書き方は、空白が混じったパスでもエクスプローラを開くためのイディオム。