Windows 批处理文件:usebackq,引号内的引号

Wer*_*rCD 6 batch windows-xp

目标:在多步清理结束时删除空文件夹。不带“Force”的 rd 删除非空目录。

这有效:

for /f "usebackq" %%d in (`"dir O:\Folder~1\Folder /ad/b/s | sort /R"`) do rd "%%d"
Run Code Online (Sandbox Code Playgroud)

这些不起作用:

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"
Run Code Online (Sandbox Code Playgroud)

我知道我错过了一些简单的东西......

编辑
将下面的示例添加到混合中:
在此处输入图片说明

如果我真的回显 %d 它会回显.... "O:\Patient"。不是全名。

小智 3

您不需要带(外部)双引号usebackq

您可以从管道命令中获取目录列表,但是当输出包含空格时,只有第一部分会传递给变量%%d。为了避免这种情况,请使用附加tokens=*参数(来自for /?):

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