DOS批处理FOR循环删除不包含字符串的文件

时间:2012-05-28 16:56:56

标签: for-loop batch-file

我想删除当前目录中名称中不包含字符串“sample”的所有文件。

例如,

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

我想删除名称中包含 sample 的文件以外的所有文件。

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?

感谢。

3 个答案:

答案 0 :(得分:6)

最简单的方法是使用带有/V选项的FIND或FINDSTR来查找不包含字符串的名称,并使用/I选项进行不区分大小写的搜索。切换到FOR /F并将结果DIR传递给FIND

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

如果在批处理文件中使用,则将%F更改为%% F.

答案 1 :(得分:2)

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

答案 2 :(得分: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
   )
)