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

ste*_*eve 4 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%
)
Run Code Online (Sandbox Code Playgroud)

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

And*_*y M 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%
Run Code Online (Sandbox Code Playgroud)

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

最后一点是,有一个名为的预定义变量USERPROFILE.它指向活动用户的"主页"文件夹.所以你可以将路径字符串减少到:.C:\Documents and Settings\username"%USERPROFILE%\Application Data\Microsoft\Outlook\test.OTM"


小智 5

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

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

forfiles /D -2 /C "cmd /c ECHO file selected...@path, dated @fdate"
Run Code Online (Sandbox Code Playgroud)