2012-05-28 77 views
6

我想刪除當前目錄中不包含字符串「sample」的所有文件。DOS批處理FOR循環刪除不包含字符串的文件

例如,

test_final_1.exe 
test_initial_1.exe 
test_sample_1.exe 
test_sample_2.exe 

我想刪除所有比包含在他們的名字樣品之外的其它文件。

for %i in (*.*) do if not %i == "*sample*" del /f /q %i 

Is the use of wild card character in the if condition allowed? 
Does, (*.*) represent the current directory? 

謝謝。

回答

6

最容易使用FIND或FINDSTR與/V選項來查找不包含字符串的名稱,而/I選項用於不區分大小寫的搜索。切換到FOR /F,並將結果DIR改爲FIND

for /f "eol=: delims=" %F in ('dir /b /a-d * ^| find /v /i "sample"') do del "%F" 

如果在批處理文件中使用%F到%% F。

+0

謝謝。這樣可行。它甚至沒有添加「eol =:delims =」。我可以知道在上面的命令行中使用它的原因是什麼?另外,dir命令的其他參數不是/ b。我明白使用/ b開關,但是,/ a-d有什麼用處? –

+0

使用命令行中的HELP DIR來獲得所有選項的幫助。但'/ a-d'從輸出中排除文件夾。 「DELIMS」應該設置爲無,以保留整個文件名。空格和製表符的默認值將在文件名的第一個空格處中斷。 ';'是一個有效的文件名字符。任何以';'開頭的文件名將被默認的'EOL'選項通過'FOR'忽略。沒有文件名可以包含':',所以我將'EOL'選項設置爲該字符。 – dbenham

2
setlocal EnableDelayedExpansion 
for %i in (*.*) do (set "name=%i" & if "!name!" == "!name:sample=!" del /f /q %i) 
2

Aacini的答案爲我工作。我需要一個bat文件來解析目錄樹,找到所有帶有xyz文件擴展名的文件,並且不包含路徑中任何位置的badvalue。解決方案是:

setlocal enableDelayedExpansion 

for /r %%f in (*.xyz) do (
    set "str1=%%f" 
    if "!str1!" == "!str1:badvalue=!" (
     echo Found file with xyz extension and without badvalue in path 
    ) 
) 
+0

這與Aacini的答案沒有什麼不同。它增加了什麼? – Ben

相關問題