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

批处理脚本优化:保留指定子文件夹并清理过期文件

批处理脚本修改方案:排除指定子文件夹删除旧文件

原脚本的第二个forfiles命令会递归删除Z盘下所有30天以上的.xlsx文件,包括归档用的1st_of_Month_Reports子文件夹内的文件。以下是两种无需迁移归档文件的修改方案:

方案一:在forfiles中嵌入路径判断

通过findstr检查文件路径是否包含目标归档文件夹,仅当路径不匹配时执行删除操作,逻辑简洁直接:

net use Z: \\shared\Operations\Analytics\ActivityReports

:: 将所有含_01.xlsx的文件移至归档文件夹
forfiles /p Z: /m *_01.xlsx /C "cmd /c move @path \"Z:\1st_of_Month_Reports\""

:: 删除30天以上的.xlsx文件,排除1st_of_Month_Reports子文件夹
forfiles /p Z: /s /m *.xlsx /D -30 /C "cmd /c echo @path | findstr /i /c:\"\\1st_of_Month_Reports\\\" >nul 2>&1 || del @path"

关键逻辑说明

  • echo @path | findstr /i /c:\"\\1st_of_Month_Reports\\\" >nul 2>&1:检查当前文件的完整路径是否包含归档文件夹的标识,/i忽略大小写,>nul 2>&1屏蔽无关输出
  • ||:仅当前面的findstr命令执行失败(即路径不包含归档文件夹)时,才触发后面的del @path删除操作

方案二:用dir+for组合筛选文件

适合需要更复杂筛选规则的场景,先通过dir和findstr过滤掉归档文件夹内的文件,再逐个检查文件是否超过30天并删除:

net use Z: \\shared\Operations\Analytics\ActivityReports

:: 将所有含_01.xlsx的文件移至归档文件夹
forfiles /p Z: /m *_01.xlsx /C "cmd /c move @path \"Z:\1st_of_Month_Reports\""

:: 删除30天以上的.xlsx文件,排除1st_of_Month_Reports子文件夹
for /f "delims=" %%f in ('dir /s /b /a-d Z:\*.xlsx ^| findstr /v /i /c:"\1st_of_Month_Reports\"') do (
    forfiles /p "%%~dpf" /m "%%~nxf" /D -30 /C "cmd /c del @path"
)

关键逻辑说明

  • dir /s /b /a-d Z:\*.xlsx:递归列出Z盘下所有.xlsx文件的完整路径,/a-d确保只返回文件而非文件夹
  • findstr /v /i /c:"\1st_of_Month_Reports\":反向过滤,剔除路径中包含归档文件夹的文件
  • 外层for /f遍历筛选后的文件路径,内层forfiles验证文件是否超过30天,符合条件则执行删除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:15:23