文件夹名字有空格的批处理文件循环

65

如何修改这个内容:

for /f %%a IN ('dir /b /s build\release\*.dll') do echo "%%a"

路径中包含空格时该怎么办?

例如,如果从以下位置运行:

c:\my folder with spaces

它将会输出:

c:\my

感谢你


尽量不要使用变量的参数扩展字母,如果以后需要添加它们,代码将难以阅读并容易出错。它们是f d p n x s a t z。最简单和最安全的方法是使用大写字母(即%%a和%%A是不同的变量)。 - Ricardo Zorio
4个回答

108
你需要使用:

for /f "delims=" %%a IN ('dir /b /s build\release\*.dll') do echo "%%a"

这将覆盖默认的分隔符,即TAB和SPACE。

37

我解决了这个问题,方法是在IN子句中添加"type"并将路径用双引号括起来。

FOR /F %%A IN ('type "c:\A Path With Spaces\A File.txt"') DO (
    ECHO %%A
)

这篇文章给了我一个使用 "type" 在 IN 子句中的想法。


1
当使用 /D 而非 /F 时,引号是唯一的选项(只有 /F 可以使用分隔符)。 - Paul

7

如果您不想处理“引号”,可以在%~dpnx[]中使用“s”开关......这将输出易于处理的短文件名。

从命令行中......

for /f "delims=" %f IN ('dir /b /s "C:\Program Files\*.dll"') do echo %~sdpnxf

在 .CMD/.BAT 文件中,您需要“转义” [%],例如将其加倍 [%%]。
for /f "delims=" %%f IN ('dir /b /s "C:\Program Files\*.dll"') do echo %%~sdpnxf

0
问题在于字符串中有一个通配符被解释为文件名。同时,如果字符串中包含空格,你需要使用双引号。我不确定是否有一种方法可以转义通配符。
for %a IN ("dir /b /s build\release\.dll") do echo %a

"dir /b /s build\release\.dll"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接