【bat】bat如何删除某个目录下文件名包含abc字符串的文件

【1】需求

有10000多个文件,分布在一个大文件夹下的众多子目录,要删除文件名中包含指定字符集的文件。

如下图:

    

我要删除 test 目录下包含所有子文件夹的所有  文件名中带有 s1/s2/s3 的文件。

这个需要匹配的字符串已经写到 config.txt 文件中

【2】解决

(2.1)双循环(文件多巨慢,10000*200此循环)

 我的10000多个文件,然后需要找的字符串有200个。如果这样双循环,每个 要循环查找200W次,太慢了。

@echo off
for /R "D:\test" %%s in (*) do (
     for /f  %%i in (config.txt) do (
          echo %%s | findstr %%i >temp1.log
          for /f %%f in (temp1.log) do (
               if %%f equ '' (
                  echo %%s skip
               ) else (
                 echo %%s need del
                 rem del %%s
               )
          )
      )
)

pause

效果如下:

  

 

(2.2)善用文件(高效,循环200次)

如下图,我们还可以先  rem 最后一行的 del %%i ,先查看一下是否是我们需要删除的。

即使已经删除了,在 del_filename.txt 里有留存记录,可以知道删除了什么文件。

@echo off
Rem 遍历所有文件名,保存到文件 all_filename.txt
for /R "D:\test" %%s in (*) do (
  echo  %%s >> all_filename.txt
)

Rem 遍历 config.txt 关键字文件,每个关键字去 all_filename.txt文件中查找,获取需要删除的文件名存储到 del_filename.txt 
for /f %%i in (config.txt) do (
    findstr %%i all_filename.txt >>del_filename.txt
)

Rem 删除需要删除的文件名
for /f %%i in (del_filename.txt) do (
  echo delfile %%i
  del %%i
)

 

【无效案例 errorlevel】

之前想用 %errorlevel%,但发现根本不行。不管 findstr 查没查到,永远是0 。

@echo off
set search_string=example
set file_name=myfile.txt

findstr /c:%search_string% %file_name%

if %errorlevel% equ 0 (
    echo Found!
) else (
    echo Not found.
)

 

posted @ 2023-05-09 12:14  郭大侠1  阅读(580)  评论(0编辑  收藏  举报