空ディレクトリを削除する

windowsで空ディレクトリ削除するバッチファイル。検索すると出てはくるのだが、マトモに動作するとは思えないものばかり。仕方なく自分で作成(ちなみに削除するのは、空のディレクトリのみ。フォルダは削除しないというか出来無い。尚、ディレクトリとフォルダの違いが分からない方は、本batファイルにおいては同じと考えてもらって良い)。
ポィントは4つ。最初のポィントは[ rmdir ]が、オプション指定無しで使用すると、空ディレクトリしか削除しない仕様という点。次のポィントは、サブルーチンで再帰処理している点。これで空ディレクトリが入れ子になっていても、削除してくれる。3つ目は、[ %~1 ]と記載する事で引数[ %1 ]内から[ " ]を取り除いて、再度["]で囲っている点。最後はサブルーチンへの引渡し時に[ " ]で囲っている事。こうしないと、スペースが有ると、スペースで分離して一つの引数に入れてくれない。
尚、使用にあたっては、削除するbatファイルなので、テスト環境で確認してから使用して欲しい。何故なら、Web上で公開されているbatファイルには怪しい物も有り、鵜呑みにしない方が良い。
それにしても、久方ぶりにbatファイルを書いたので、変数の記載を忘れてて少々時間を要した(特にDOSの)。何より酷いのは、[ コマンドラインでは%は1個だが、batファイル内では%%と2個付ける事 ]という趣旨の説明が蔓延している事。これは、絶対勘違いする。この説明は、あくまでも for文の処理結果の代入に使用する変数の話。チョットだけ[ for文で処理結果を代入する変数は ]等の記載をすればすむ事なのに。Webで情報発信してれるのはありがたいが、勘違いさせない記述というのを心がけて欲しい。
それにしてもDOSのバッチファイルは文法が滅茶苦茶で、後付の無理やり感が漂う。
追記
なんと、マウントしていないファイルサーバを、クライアントのエクスプローラipアドレスやドメイで決め打ち指定で開いて、サーバに有るbatファイルをクリック実行させると、batファイル内のコマンドが、クライアント内の c:\Windowsディレクトリ下に対して実行されるという驚愕の事実が判明したので、判定文を冒頭に追加。こんな恐ろしい仕掛けが有るとは、Microsoftは何を考えてんだ。多分、泣いた人がいるだろうな。



%echo off
echo;
echo %0
echo;
set fileName=%0
if "%fileName:~1,2%"=="\\" (
echo マウントされていません。終了します。
echo;
pause
@echo on
GOTO :EOF
)
FOR /D %%i IN (*.*) DO CALL :SUB "%%i"
@echo on
GOTO :EOF

:SUB
FOR /D %%x IN ("%~1\*.*") DO CALL :SUB "%%x"
echo %1
rmdir %1
exit /b