【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 @   郭大侠1  阅读(901)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
历史上的今天:
2020-05-09 sql server跟踪、监控、审核、扩展事件学习路径【转】
2020-05-09 (5.3.12)sql server服务器选项
2020-05-09 (4.43)sql server中的set
2020-05-09 (5.20)mysql中的ProxySQL实现读写分离与读负载均衡【转】
2019-05-09 locale报错,显示中文乱码
2018-05-09 sql server中带有output的DML
点击右上角即可分享
微信分享提示