2014-09-13 78 views
0

我将findstr结果重定向到文本文件。接下来,我将删除名称写入文本文件的文件,但我遇到问题。为什么在FOR循环中处理具有列表文件名称空间的列表文件失败?

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

此代码正在删除包含“木马”作为字符串的文件。

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

带空格的文件名通常应用引号引起来。但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" 
+0

1,因为我似乎从来没有真正详细阅读usebackq /脸红。我知道它处理了这个命令并且使用了它,但不是需要引用的文件名。感谢这一点,并使用一个没有使用命令的例子。 – Torqane 2014-09-14 03:18:59

相关问题