【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. )
分类:
bat
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源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