如何将两条含findstr的批量删除CMD命令合并为一条?
合并CMD命令实现批量删除含9/10位数字的文件
问题描述
我需要用findstr查找并删除文件名包含9位或10位随机数字(后跟任意扩展名)的文件,测试目录下的文件如下:
ABCD142359865.pdf EDFGH9658798563.docx ZdgBE158795832.sql GHrK147859632.mdb !!!!!789548796.eml XGU125965879.jpg
目前我用两条CMD命令实现需求:
FOR /F "delims=" %%A IN ('dir /a-d /b /s "%~dp0" ^| findstr /i /r "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\."') DO del /a /q "%%~A" FOR /F "delims=" %%A IN ('dir /a-d /b /s "%~dp0" ^| findstr /i /r "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\."') DO del /a /q "%%~A"
这两条命令可以正常工作,但能不能合并成一条?
解决方案
可以合并成单条命令,关键是把findstr中分别匹配9位、10位数字的两个正则表达式用|(逻辑或)整合到一起,一次筛选就能覆盖两种情况,无需重复执行循环。
合并后的完整命令:
FOR /F "delims=" %%A IN ('dir /a-d /b /s "%~dp0" ^| findstr /i /r "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\.|[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\."') DO del /a /q "%%~A"
说明
findstr的/r参数启用正则模式,|分隔两个匹配规则,分别对应“9位数字+扩展名分隔符”、“10位数字+扩展名分隔符”的文件名特征- 保留原命令的遍历逻辑:
dir /a-d /b /s递归遍历当前脚本所在目录下的所有文件(排除子目录) - 保留原删除逻辑:
del /a /q强制删除所有属性的文件(包括隐藏、系统文件),且无需确认弹窗
内容的提问来源于stack exchange,提问作者Jpie
相关产品推荐
相关产品推荐

