2014-09-13 76 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

相關問題