You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批处理脚本需求:遍历文件夹并删除指定名称外的所有内容

批量保留多文件/目录的批处理脚本优化

原脚本问题分析

  1. sourcedir变量错误使用循环变量%%a,导致目标路径无效
  2. 仅支持单个保留文件/目录,无法批量处理多个目标

优化后的脚本

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

:: 定义数千个文件夹所在的父目录
SET "rootdir=C:\testing"
:: 要保留的文件列表(逗号分隔多个名称)
SET "keepfiles=test.bat,readme.md,config.ini"
:: 要保留的目录列表(逗号分隔多个名称)
SET "keepdirs=keepthisfolder,another_keep_dir,backup"

:: 遍历父目录下的所有子文件夹
FOR /d %%d IN ("%rootdir%\*") DO (
    :: 定位到当前子文件夹下的all\base目标目录
    SET "targetdir=%%d\all\base\"
    :: 检查目标目录是否存在,避免无意义报错
    IF EXIST "!targetdir!" (
        :: 删除目标目录下不在保留列表中的子目录
        FOR /d %%a IN ("!targetdir!\*") DO (
            SET "dirfound="
            :: 遍历保留目录列表,匹配当前目录名称
            FOR /F "delims=, tokens=*" %%k IN ("%keepdirs%") DO (
                IF /I "%%~nxa"=="%%k" SET "dirfound=1"
            )
            :: 未匹配到保留项则删除目录(/S递归删子目录,/Q静默执行)
            IF NOT DEFINED dirfound RD /S /Q "%%a"
        )

        :: 删除目标目录下不在保留列表中的文件
        FOR %%a IN ("!targetdir!\*") DO (
            SET "filefound="
            :: 遍历保留文件列表,匹配当前文件名称
            FOR /F "delims=, tokens=*" %%k IN ("%keepfiles%") DO (
                IF /I "%%~nxa"=="%%k" SET "filefound=1"
            )
            :: 未匹配到保留项则删除文件
            IF NOT DEFINED filefound DEL "%%a"
        )
    )
)

ENDLOCAL
GOTO :EOF

关键说明

  • ENABLEDELAYEDEXPANSION:启用延迟变量扩展,确保循环内部能正确读取/修改变量
  • keepfiles/keepdirs:用逗号分隔多个需要保留的名称,/I参数表示忽略大小写(如需严格大小写匹配可删除该参数)
  • 预览测试:可以先将RD /S /Q改为ECHO RD /S /Q、DEL改为ECHO DEL,先查看要删除的内容,确认无误后再去掉ECHO执行真实删除
  • 特殊名称处理:如果要保留的名称包含逗号,可将分隔符改为分号,同时调整FOR /F的delims=;参数

内容的提问来源于stack exchange,提问作者Lex King

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 22:57:06