【Windows】【*.bat】バッチファイルで行数を判定したい!空のフォルダを削除したい!!!


毎日workフォルダを作ってるんだけど、もし1日終わって中身が空だったら消せるようにしたい。
どうすればいい?

こんな質問をされたのでバッチでどうにか出来るか考えてみた。

要はLinuxで言う、find -emptyとかwc -lでif判定するとかすればいいわけだよね。

やってみた

行数で判定するのが楽かなと思ったので試行錯誤してたらこうなった。
対象フォルダをYYYYMMDDという名前と仮定。

empty.bat
@echo off
setlocal

rem 日付をYYYYMMDDで変数定義
set TODAY=%date:/=%

rem 対象フォルダのフルパスを変数定義
set EMPTY_FOLDER=C:\bat\%today%

rem 対象フォルダのファイル・フォルダ数を変数定義
for /f "usebackq" %%I in (`dir /b %EMPTY_FOLDER% ^| find /c /v ""`) do set CNT=%%I

rem 0個ならフォルダ削除
if %CNT% equ 0 (
    rmdir %EMPTY_FOLDER%
)

endlocal
exit

長くない????

多分もうちょっとどうにかなるけど、とりあえずそれっぽいのでこれで。

find /c /v ""で行数を判定できる。
 find /cで行数を表示。
 find /v ""で空文字に該当しない行数(要はdir /bの結果の行数)を数えられる。
 これがUNIXで言うwc -lらしい。知らなかった。

batのfor文は特殊なので割愛します。
気になる方はこちらを参考にしてください。
.bat(バッチファイル)のforコマンド解説。

余談

for /rでも出来るっぽいね。