web-dev-qa-db-ja.com

Windowsバッチファイル:usebackq、引用符内の引用符

目標:複数ステップのクリーンアップの最後に空のフォルダーを削除します。 「強制」のない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"

私は私が単純な何かを逃していることを知っています...

[〜#〜]編集[〜#〜]
以下の例をミックスに追加します。
enter image description here

実際に%dをエコーすると、エコーします.... "O:\ Patient"。フルネームではありません。

6
WernerCD

usebackqでの(外側の)二重引用符は必要ありません。

パイプされたコマンドからディレクトリのリストを取得できますが、出力にスペースがある場合、最初の部分のみが%%d変数に送られます。これを回避するには、追加のtokens=*パラメーター(for /?から)を使用します。

for /f "usebackq tokens=*" %%d in (`dir "C:\Program Files" /ad /b /s ^| sort /R`) do echo "%%d"
3
pKai

パイプ文字をエスケープする必要があります。

FOR /F "usebackq" %i IN (`dir /b ^| sort`) DO echo %i
0
Goyuix