为什么在FOR循环中处理列表文件名中带空格的列表文件失败?

时间:2014-09-13 16:34:50

标签: batch-file

我将findstr结果重定向到文本文件。接下来我删除了写有文本文件名称的文件,但是我遇到了问题。

如果findstr结果文件的文件名中有空格,则FOR循环中的结果文件中的所有文件都不会被删除。但是,如果findstr创建的列表文件的文件名没有名称空格,则FOR循环将按预期工作,并删除文本文件中列出的所有文件。

此代码正在删除包含" Trojan"作为一个字符串。

findstr /s /m "Trojan" "C:\*.*">>"C:\result.txt" 2>nul 
for /f "delims=" %%i in (C:\result.txt) do del "%%i"

但此代码不会删除结果文本文件中列出的文件。

findstr /s /m "Trojan" "C:\*.*">>"C:\result 2.txt" 2>nul 
for /f "delims=" %%i in (C:\result 2.txt) do del "%%i"

结果文本文件名称中包含空格。

我的第二个代码有什么问题,结果文本文件在文件名中有空格?

1 个答案:

答案 0 :(得分:1)

带空格的文件名通常应用引号括起来。但FOR /F ... IN("string") DO ...被视为字符串而不是文件名。如果您仔细阅读帮助,有一个简单的解决方案是显而易见的。从命令行:

help for

for /?

相关部分是

   usebackq        - specifies that the new semantics are in force,
                     where a back quoted string is executed as a
                     command and a single quoted string is a
                     literal string command and allows the use of
                     double quotes to quote file names in
                     file-set.

所以你需要的只是:

findstr /s /m "Trojan" "C:\*.*">>"C:\result 2.txt" 2>nul 
for /f "usebackq delims=" %%i in ("C:\result 2.txt") do del "%%i"