如何修改批处理脚本实现任意目录递归删除指定后缀外的文件
批处理代码调整实现方案
最终修改后代码
@echo off :: 默认为脚本所在目录作为根目录,若要使用执行时的工作目录,可替换为 set "ROOTDIR=%cd%\" set "ROOTDIR=%~dp0" :: 可选:支持拖放文件夹到脚本图标上运行,使用拖放的文件夹作为根目录 if not "%~1"=="" set "ROOTDIR=%~1\" :: 预览模式:首次运行建议先把del换成echo,确认待删除文件列表无误后再改回del执行删除 for /f "delims=" %%F in ('dir "%ROOTDIR%" /s /b /a-d ^|findstr /vile ".xls .xlt .xlm .xlsx .xlsm .xltx .xltm .ppt .pot .pps .pptx .pptm .potx .ppam .ppsx .sldx .sldm .pdf .doc .dot .docx .html .docm .dotb .docb .tiff .jpg .png .cdr .cpt .psd"') do del "%%F"
修改说明
- 移除了原代码中固定写死的路径
E:\Testdel\,替换为动态获取的目录:%~dp0是批处理内置变量,自动获取脚本本身所在的文件夹路径,末尾自带反斜杠,适合把脚本放在待处理目录根目录直接运行的场景%cd%是当前命令行的工作目录,适合你在cmd中切换到目标目录后执行脚本的场景- 新增拖放支持,直接把需要处理的文件夹拖到脚本图标上即可运行,无需移动脚本位置
- 原有的后缀匹配逻辑保留不变,
findstr /vile参数会排除所有指定后缀的文件,仅删除不在保留列表内的文件
注意事项
- 首次运行前请务必先把代码最后的
del替换为echo,执行后会输出所有待删除的文件列表,核对无误后再改回del执行实际删除,避免误删重要文件 - 可按需修改
findstr后面的后缀列表,增减你需要保留的文件类型,注意每个后缀前加.,不同后缀用空格分隔 - 递归遍历范围包含根目录下所有层级的子文件夹,符合遍历要求
内容的提问来源于stack exchange,提问作者user1868774
相关产品推荐
相关产品推荐

