目標:複数ステップのクリーンアップの最後に空のフォルダーを削除します。 「強制」のないrdは、空でないディレクトリを削除します。
これは機能します:
for /f "usebackq" %%d in (`"dir O:\Folder~1\Folder /ad/b/s | sort /R"`) do rd "%%d"
これらは機能しません:
for /f "usebackq" %%d in (`"dir \"O:\Folder With Spaces\Folder\" /ad/b/s | sort /R"`) do rd "%%d"
for /f "usebackq" %%d in (`"dir ""O:\Folder With Spaces\Folder"" /ad/b/s | sort /R"`) do rd "%%d"
for /f "usebackq" %%d in (`"dir ^"O:\Folder With Spaces\Folder^" /ad/b/s | sort /R"`) do rd "%%d"
私は私が単純な何かを逃していることを知っています...
[〜#〜]編集[〜#〜]
以下の例をミックスに追加します。
実際に%dをエコーすると、エコーします.... "O:\ Patient"。フルネームではありません。
usebackq
での(外側の)二重引用符は必要ありません。
パイプされたコマンドからディレクトリのリストを取得できますが、出力にスペースがある場合、最初の部分のみが%%d
変数に送られます。これを回避するには、追加のtokens=*
パラメーター(for /?
から)を使用します。
for /f "usebackq tokens=*" %%d in (`dir "C:\Program Files" /ad /b /s ^| sort /R`) do echo "%%d"
パイプ文字をエスケープする必要があります。
FOR /F "usebackq" %i IN (`dir /b ^| sort`) DO echo %i