スクリプトを使用して Windows の特定のディレクトリから空のフォルダを削除する方法

スクリプトを使用して Windows の特定のディレクトリから空のフォルダを削除する方法

私は使用していますr.jsビルドツールとして、しかし今日現在、そのツールではビルドディレクトリ内の空のフォルダを削除する機能がありませんでした。私は次の2つのスクリプトを見つけました

for /f "usebackq" %%d in ("dir /ad/b/s | sort /R") do rd "%%d"

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

ネットで調べているのですが、いつも

%%i was unexpected at this time.

または

%%d was unexpected at this time.

そして、スクリプトにディレクトリがどこにあるかを伝える方法がわかりません。

私のビルドスクリプトは

@echo off
where /q r.js || (
    echo requirejs node package is not installed. You must install node, npm and then run npm install -g requirejs
    goto :eof
)
node r.js -o app.build.js
:end

スクリプトに、内部にあるすべての空のディレクトリを削除するように指示する必要があります。../../js

答え1

完全に理解できなかった理由で、forバッチ ファイルの内側と外側で異なる構文を使用します。

このコマンドはバッチファイル内で動作するはずです

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

コマンドプロンプト(バッチファイルなし)では、%%i次のように置き換える必要があります%i

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

また、The directory is not empty.エラー メッセージを抑制するには、 を使用しますrd "%i" 2>NUL

単純なrd "%i">NUL出力リダイレクト(標準出力)、エラーメッセージ(標準エラー出力)。

答え2

最初のスクリプト、つまり以下のスクリプトに注目してください。スペース文字を含むディレクトリでは動作しません

for /f "usebackq" %%d in ("dir /ad/b/s | sort /R") do rd "%%d"

正しいバージョンはここにあります。デフォルトのスペースとタブを区切り文字として使用することは無効にする必要があることに注意してください。

for /f "usebackqdelims=" %%d in ("dir /ad/b/s | sort /R") do rd "%%d"

コマンドプロンプトでスクリプトを使用する方法については、Dennis の回答 (承認済み) を参照してください。

関連情報