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

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"

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

编辑
添加下面的示例:
在此处输入图片描述

如果我实际回显 %d,它会回显....“O:\Patient”。不是全名。

答案1

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

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

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

答案2

您需要转义管道字符:

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

相关内容