Windows批处理文件,用于检查文件的修改日期,如果不是特定值,则输出到日志文件

时间:2011-03-08 10:16:38

标签: windows batch-file

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

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

2 个答案:

答案 0 :(得分:7)

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

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

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

以下是如何实施它的方法:

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\username。因此,您可以将路径字符串减少到:"%USERPROFILE%\Application Data\Microsoft\Outlook\test.OTM"

答案 1 :(得分:5)

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

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

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