目标:在多步骤清理结束时删除空文件夹。不带“强制”的 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