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

求助:修复可排除指定文件的6个月以上旧文件删除批处理脚本

批处理脚本:删除6个月以上旧文件并保留指定排除列表文件

完整可运行脚本

@echo off
setlocal enabledelayedexpansion

:: 配置参数 - 根据实际需求修改
set "TARGET_DIR=C:\Your\Target\Folder"
set "EXCLUDE_LIST=list.txt"
set "MONTHS=6"

:: 校验目标目录
if not exist "%TARGET_DIR%" (
    echo 错误:目标目录不存在 - %TARGET_DIR%
    exit /b 1
)

:: 初始化排除列表标记
set "EXCLUDE_FLAG=0"
if exist "%EXCLUDE_LIST%" (
    set "EXCLUDE_FLAG=1"
    :: 将排除列表文件中的文件名拼接为|分隔的字符串,便于匹配
    set "EXCLUDE_FILES="
    for /f "delims=" %%f in (%EXCLUDE_LIST%) do (
        set "EXCLUDE_FILES=!EXCLUDE_FILES!|%%f"
    )
    set "EXCLUDE_FILES=|!EXCLUDE_FILES!"
)

:: 扫描并处理文件
echo 开始扫描 %TARGET_DIR% 中超过%MONTHS%个月的文件...
forfiles /p "%TARGET_DIR%" /s /m *.* /d -%MONTHS% /c "cmd /c if @isdir==FALSE (
    set 'FILE=@fname@ext'
    set 'KEEP=0'
    if %EXCLUDE_FLAG% equ 1 (
        echo !EXCLUDE_FILES! | findstr /i /c:"|!FILE!" >nul && set 'KEEP=1'
    )
    if !KEEP! equ 0 (
        echo 删除:@path
        del /f /q "@path"
    ) else (
        echo 保留(排除列表):@path
    )
)"

echo 操作完成
endlocal

关键说明

  • 延迟变量扩展:setlocal enabledelayedexpansion 是必须的,确保在forfiles的嵌套命令中能实时读取变量值
  • 日期判断:使用forfiles /d -%MONTHS%直接匹配N个月前的文件,避免手动计算日期带来的系统格式兼容问题
  • 排除列表处理:将list.txt中的文件名拼接为|file1|file2|格式,通过findstr快速判断当前文件是否在排除列表中,支持大小写不敏感匹配
  • 目录过滤:@isdir==FALSE确保只处理文件,不会误删目录
  • 安全提示:初次测试时,请将del /f /q "@path"替换为echo 待删除:@path,确认删除范围正确后再执行实际删除

使用注意事项

  • 修改TARGET_DIR为你的目标目录完整路径
  • list.txt需每行填写一个要保留的文件名(如trial.csv、trial2.csv),可放在脚本同目录或指定完整路径
  • 若不需要遍历子目录,移除forfiles命令中的/s参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 20:25:15