Windowsbatch file检查文件的修改date和输出到日志文件,如果不是一个特定的值

我需要logging在特定文件夹中没有特定文件的系统,并创build了下面的批处理工作正常。 它将被域login脚本调用(客户端是在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% ) 

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

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

  • 它来自日期和时间的组合;
  • 它是特定于本地的;
  • 这是一个字符串

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

以下是你如何实现它:

 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会返回格式为dd.MM.yyyy hh:mm的日期和时间。 所以%filedatetime:~0,-6%部分相应格式和中断时间部分。 您可能需要稍微更改表达式以适合您的情况。

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

如果日期相对于今天(例如最近7天内更新的文件),则可以使用内置了日期计算的“forfiles”命令。

例如:列出在过去两天内修改过的所有文件:

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