【问题标题】:Windows Batch file to check modified date of file and output to log file if not a specific valueWindows 批处理文件检查文件的修改日期,如果不是特定值,则输出到日志文件
【发布时间】:2011-03-08 10:16:38
【问题描述】:

我需要记录在特定文件夹中没有特定文件的系统,并创建了以下工作正常的批处理。它将由域登录脚本调用(客户端是 2003 AD 域中的 Windows XP):

IF EXIST "C:\Documents and Settings\%username%\Application Data\Microsoft\Outlook\test.OTM" (
goto END
) ELSE (
echo %DATE%_%TIME%_%COMPUTERNAME%  >> %LOG1%
)

但是,除此之外,如果文件存在,我需要检查它是否具有特定的修改日期,如果没有,则将其输出到日志文件。到目前为止,我很困惑,非常感谢对此的任何反馈/帮助。谢谢。

【问题讨论】:

    标签: windows batch-file


    【解决方案1】:

    您可以在批处理脚本中获取有关文件修改日期和时间的信息,但您需要记住以下几点:

    • 它是日期和时间的组合;
    • 这是特定于语言环境的;
    • 这是一个字符串

    这意味着在比较之前,您需要截断时间部分,为此您需要考虑系统区域设置中指定的显示格式。而且因为它是一个字符串,你可能只能检查它是否是一个特定的日期,而不是它是否属于一个特定的时期。

    以下是实现它的方法:

    SET filename="C:\Documents and Settings\%username%\Application Data\Microsoft\Outlook\test.OTM"
    IF NOT EXIST %filename% GOTO log
    FOR %%f IN (%filename%) DO SET filedatetime=%%~tf
    IF "%filedatetime:~0,-6%" == "%checkdate%" GOTO END
    :log
    ECHO %DATE%_%TIME%_%COMPUTERNAME%  >> %LOG1%
    

    在我的系统上%%~tf 将返回格式为dd.MM.yyyy hh:mm 的日期和时间。所以%filedatetime:~0,-6% 部分遵循该格式并相应地切断时间部分。您可能需要稍微更改表达式以适应您的情况。

    最后一件事是,有一个名为USERPROFILE 的预定义变量。它指向活动用户的“主”文件夹C:\Documents and Settings\<i>username</i>。因此,您可以将路径字符串缩减为:"%USERPROFILE%\Application Data\Microsoft\Outlook\test.OTM"

    【讨论】:

      【解决方案2】:

      如果日期与今天相关(例如,文件在过去 7 天内更新),您可以使用内置日期计算的“forfiles”命令。

      例如:列出最近 2 天内修改过的所有文件:

      forfiles /D -2 /C "cmd /c ECHO file selected...@path, dated @fdate"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多