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

求助:如何实现批处理脚本检查文件最后修改日期匹配当前日期

嘿,恭喜开启你的学徒生涯第一个脚本任务!我来帮你搞定文件修改日期检查的核心部分,还会优化你现有的代码,让它更健壮。

首先,咱们得解决日期格式兼容性的问题——因为不同系统的%date%输出格式可能不一样(比如有的是MM/DD/YYYY,有的是DD/MM/YYYY),直接对比容易出错。我会用wmic命令获取标准格式的日期,保证兼容性。

接下来是核心需求:检查指定目录下的目标文件是否全部为今日修改。如果全部符合,输出到test.txt;如果有任何一个不符合,生成唯一的error_X.txt文件(避免覆盖旧的错误日志)。

下面是完整的脚本代码,我会逐段解释:

@echo off
setlocal enabledelayedexpansion

:: 1. 获取标准格式的当前日期(避免区域设置导致的格式混乱)
for /f "skip=1 tokens=2-4 delims=." %%a in ('wmic os get localdatetime') do (
    set "year=%%c"
    set "month=%%a"
    set "day=%%b"
    goto :date_acquired
)
:date_acquired
:: 根据你的系统短日期格式调整这里!比如系统显示"13/09/2024"就写成%day%/%month%/%year%,显示"09/13/2024"就写成%month%/%day%/%year%
set "currdate=%day%/%month%/%year%"

:: 2. 设置路径变量(方便后续修改维护)
set "excel_dir=C:\Users\mmi\Desktop\batch\qvtests"
set "txt_dir=C:\Users\mmi\Desktop\batch\qvtests\dossier"
set "output_root=C:\Users\mmi\Desktop"

:: 3. 标记是否存在非今日修改的文件(0=全部符合,1=存在异常)
set "has_error=0"

:: 检查excel文件:查找修改日期早于今天的文件
forfiles /P "%excel_dir%" /M *excel.xlsx* /D -1 /C "cmd /c exit 1" >nul 2>&1
if not errorlevel 1 (
    set "has_error=1"
)

:: 检查txt文件:同样查找修改日期早于今天的文件
forfiles /P "%txt_dir%" /M *.txt* /D -1 /C "cmd /c exit 1" >nul 2>&1
if not errorlevel 1 (
    set "has_error=1"
)

:: 4. 根据检查结果执行对应分支
if %has_error% equ 0 (
    goto :correct
) else (
    goto :error
)

:correct
:: 输出到test.txt
echo. >> "%output_root%\test.txt"
echo %currdate% >> "%output_root%\test.txt"
forfiles /P "%excel_dir%" /M *excel.xlsx* /C "cmd /c echo @file @fdate @ftime" >> "%output_root%\test.txt"
forfiles /P "%txt_dir%" /M *.txt* /C "cmd /c echo @file @fdate @ftime" >> "%output_root%\test.txt"
echo 所有文件均为今日修改,结果已保存至test.txt
goto :end

:error
:: 生成唯一的error_X.txt文件名(避免覆盖旧日志)
set "error_num=1"
:find_unique_error_file
if exist "%output_root%\error_%error_num%.txt" (
    set /a error_num+=1
    goto :find_unique_error_file
)
set "error_file=%output_root%\error_%error_num%.txt"

:: 输出到新的错误日志
echo. >> "%error_file%"
echo %currdate% >> "%error_file%"
forfiles /P "%excel_dir%" /M *excel.xlsx* /C "cmd /c echo @file @fdate @ftime" >> "%error_file%"
forfiles /P "%txt_dir%" /M *.txt* /C "cmd /c echo @file @fdate @ftime" >> "%error_file%"
echo 发现非今日修改的文件,结果已保存至%error_file%
goto :end

:end
endlocal

关键细节解释:

  • 日期格式适配:一定要根据你系统的短日期格式调整currdate的拼接方式。你可以先在命令行输入date查看格式,比如显示2024-09-13就改成set "currdate=%year%-%month%-%day%"。
  • 错误判断逻辑:forfiles /D -1会查找修改日期早于今天的文件,如果找到这样的文件,就会执行exit 1,此时errorlevel不为1,我们就标记has_error=1。
  • 唯一错误文件名:通过循环递增error_num,直到找到不存在的error_X.txt,这样每次出错都会生成新文件,不会覆盖之前的日志。
  • 变量化路径:把所有固定路径改成变量,以后修改路径只需要改开头的变量,不用到处找替换。

如果还有不清楚的地方,随时问哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 07:28:12