如何编写Windows Batch脚本保留指定文件夹并删除其余文件夹
批处理批量删除非指定文件夹实现方案
轻量脚本(适合保留文件夹较少的场景)
你可以直接在目标路径下新建.bat后缀的批处理文件,复制以下代码运行即可:
@echo off setlocal enabledelayedexpansion :: 替换为你存放所有文件夹的上级目录路径 set "root_dir=C:\你的目标文件夹路径" :: 填写需要保留的文件夹名称,多个用空格分隔 set "keep_folders=2FL-95 2FL-73 2FL-25" :: 遍历根目录下所有一级文件夹 for /d %%i in ("%root_dir%\*") do ( set "folder_name=%%~ni" :: 判断文件夹是否在保留列表中 echo !keep_folders! | find /i "!folder_name!" > nul || ( :: 测试阶段可以注释下一行,只看输出的待删除列表是否正确 rmdir /s /q "%%i" echo 已删除文件夹:%%i ) ) echo 所有操作执行完成 pause
注意:该方案存在低概率部分匹配误判风险,如果你的文件夹名称存在包含关系(比如同时存在
2FL-9和2FL-95),请使用下方的高精度方案。
高精度脚本(适合保留文件夹较多的场景)
如果需要保留的文件夹数量较多,你可以把所有要保留的文件夹名称逐行写入同目录下的keep_list.txt,再运行以下脚本,不会出现部分匹配误判问题:
@echo off setlocal enabledelayedexpansion :: 替换为你存放所有文件夹的上级目录路径 set "root_dir=C:\你的目标文件夹路径" :: 保留列表文件路径 set "keep_list=keep_list.txt" :: 先把所有保留文件夹名存入变量 for /f "delims=" %%a in (%keep_list%) do ( set "keep_%%a=1" ) :: 遍历判断是否需要删除 for /d %%i in ("%root_dir%\*") do ( set "folder_name=%%~ni" if not defined keep_!folder_name! ( :: 测试阶段可以注释下一行,只看输出的待删除列表是否正确 rmdir /s /q "%%i" echo 已删除文件夹:%%i ) ) echo 所有操作执行完成 pause
使用注意事项
- 所有脚本运行前都建议先注释
rmdir命令行,运行后查看输出的待删除文件夹列表是否完全符合预期,确认无误后再取消注释执行删除,避免误删数据 - 路径如果包含空格,必须用英文双引号包裹路径,避免系统识别出错
内容的提问来源于stack exchange,提问作者Nir14
相关产品推荐
相关产品推荐

