たきるブログ

C#やOracleなどの情報を書いています。

【バッチ】ディレクトリをすべて削除するバッチを作る

例えば
Dir1
 ├ Dir1-1
 │ └ File1-1-1
 ├ Dir1-2
 │ └ File1-2-1
 └ File1-1

というフォルダ構造があったとする。

Dir1配下を全て削除したい時、通常ならエクスプローラーでDir1まで遷移し、Dir1-1、Dir1-2、File1-1を選択して削除すればいいわけだけど、意外と構造を削除していいかという確認が出てきたりしてしまって、夜間に一発削除できてないというオチがある、かもしれない。

そこで、バッチファイルで一切何も聞かずに消す方法で夜間バッチとかで叩き、安心してスヤァする。

その方法は、これではダメ。

rmdir /S /Q D:\Dir1

なぜなら、これではDir1フォルダまで削除しようとするから。
(カレントディレクトリをD:\Dir1に移動しておけばエラーになって消えないけど、正しいアプローチとは言えない)

そこで、以下のようにすると、安心してスヤァできる。

@echo off

SET DIRECTORY=D:\Dir1\*

SET /p RESULT=%DIRECTORY%フォルダ内のファイルを全て削除します。よろしいですか (Y/N)? 
if /i "%RESULT%" neq "Y" exit

del /S /Q %DIRECTORY%
for /D %%d in (%DIRECTORY%) do rmdir /S /Q "%%d"

echo.
echo %DIRECTORY%フォルダ内を全て削除しました。
pause

ただし、気をつけたいところは、バッチで全部走行させるので、フォルダ指定を誤っていると非常に残念な目に遭う。
一度きりとかではなくて、ちゃんとしたものを用意したいのなら、もうちょっと注意喚起してくれるようなものを用意した方がいいかも。