量産メモ帳

忘れっぽいのでメモを残しています。浅く適当に書きます。

1行のコマンドで空フォルダを一括削除する。

スポンサーリンク

フォルダを整理していたら、結構な数の空フォルダがあることに気付きました。
実際にはシステム属性のファイル(例:desktop.ini、Thumbs.db)など隠しファイルがあったりしますけど、空フォルダであれば、そういったファイルは基本的には不要だと思われます。
けれども空フォルダを削除するだけの為にわざわざソフトを入れるのも嫌なので、コマンドプロンプトで試してみた結果、こんな感じでできました。

for /f "delims=" %d in ('dir . /ad /b /s') do rd "%d"

ちなみに OS が Windows Vista 以降の場合、コマンドプロンプトを管理者モードで起動しないと、rd コマンドは使えません。
"delims="を付けたのは、フォルダ名に半角スペースが含まれていると、区切り文字とみなされてしまうためです。
この例では、カレントディレクトリ(".")を指定していますが、整理したいフォルダのパスを代わりに指定すれば、そのフォルダと全てのサブフォルダにある空フォルダを削除できます。


ただし、そのフォルダのパスに半角スペースが含まれている場合、以下のようにダブルクォーテーションで囲まなければなりません。

for /f "delims=" %d in ('dir "C:\Program Files (x86)\Microsoft Office" /ad /b /s') do rd "%d"

このコマンドの残念な点は、1回実行しただけでは空フォルダを全て削除できないことです。
と言うのも、以下のようなフォルダ階層になっていて、フォルダBが空の場合、、

┬フォルダA
└─フォルダB

フォルダBを削除しないと、フォルダAも削除できないためです。
dir コマンドを実行した時、サブフォルダのパスを先に出力するようにソートできれば良いんですが、とりあえず複数回実行すれば、余程フォルダ階層が深くない限り、空フォルダを全削除できると思います。


ちなみに rd コマンドは、空ではないフォルダを削除できない仕様になっていて、削除しようとすると「ディレクトリが空ではありません。」というエラーメッセージが出ます。
そのため、サブフォルダ数が多いと、このエラーメッセージが大量に出力されてウザいのが難点です。
それに、空ディレクトリが全て削除されたかどうかを確認することも難しいです。
まあ、コマンドを実行する前と後で以下のコマンドを実行してフォルダ数を比較するか、、、

dir /b /ad . | find /c /v ""

もしくはフォルダのプロパティを開いてフォルダ数を比較するしかないんじゃないでしょうか。

2021/02/16追記

コメント欄で教えていただいたこちらのコマンドを実行したら、1回で空フォルダを全て削除できました。

for /f "delims=" %d in ('dir . /ad /b /s ^| sort /r') do rd "%d"



参考資料: