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

如何用forfiles筛选本月修改且非新建的文件并统计数量?

解决批处理筛选本月修订文件(排除新建文件)的问题

我来帮你搞定这个需求!你想要识别本月初以来修改但非新建的文件,核心是要同时满足两个条件:文件创建时间早于本月初,且修改时间在本月初及之后。之前的forfiles命令只筛选了修改时间,所以会把本月新建的文件也包含进去,咱们来调整代码实现精准筛选。

实现思路

要达到目标,需要:

  1. 先筛选出修改时间≥本月初的文件(用forfiles的/D参数)
  2. 对这些文件额外判断创建时间<本月初,只保留符合这个条件的文件
  3. 统计符合条件的文件数量,可选输出文件名

完整批处理代码

@echo off
setlocal enabledelayedexpansion

REM 设置目标文件夹路径(注意不要加末尾的引号,后面会统一处理)
set "revisions=C:\Users\nlehman\Desktop\New folder (3)"
REM 设置本月初的日期(格式要和系统区域设置一致,比如MM/DD/YYYY)
set "month_start=08/01/2024"

REM 初始化计数器
set "revision_count=0"
REM 创建输出文件,写入表头
echo 本月初以来修订的文件列表(排除新建文件)> "Revisions_since_month_start.txt"

REM 遍历目标文件夹下所有文件,先筛选修改时间≥本月初的文件
forfiles /P "%revisions%" /S /M *.* /D +%month_start% /C "cmd /c if @isdir==FALSE (
    for /f "tokens=1-3" %%a in ('dir /tc "@path" ^| findstr /r "^[0-9]"') do (
        set "create_date=%%a/%%b/%%c"
        if "!create_date!" LSS "%month_start%" (
            echo @path >> "Revisions_since_month_start.txt"
            set /a revision_count+=1
        )
    )
)"

REM 把统计数量写入文件并在控制台提示
echo.>> "Revisions_since_month_start.txt"
echo 总计符合条件的修订文件数量:%revision_count%>> "Revisions_since_month_start.txt"
echo 处理完成!共找到 %revision_count% 个本月修订(非新建)的文件,详情请查看 Revisions_since_month_start.txt

endlocal

代码关键点解释

  • setlocal enabledelayedexpansion:启用延迟变量扩展,这样在循环内部修改和读取变量时能正常生效
  • forfiles /D +%month_start%:先过滤出修改时间在本月初及之后的文件,缩小范围
  • dir /tc "@path":获取文件的创建时间(/tc参数指定显示创建时间),再用findstr提取日期行
  • 日期格式处理:把提取到的日期转换成和month_start一致的格式,才能进行比较
  • if "!create_date!" LSS "%month_start%":判断创建时间是否早于本月初,满足则计数并可选输出文件名

可选调整

  • 如果只需要统计数量,不需要输出文件名:把代码里的echo @path >> "Revisions_since_month_start.txt"这一行删掉即可
  • 日期格式适配:如果你的系统区域设置是YYYY/MM/DD,请把month_start改成对应的格式(比如2024/08/01),同时调整create_date的拼接方式为set "create_date=%%c/%%a/%%b"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:50:51