我需要记录特定文件夹中没有特定文件的系统,并创建了下面的批处理工作正常。它将由域登录脚本调用(客户端是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%
)
然而,除此之外,如果文件存在,我需要检查它是否具有特定的修改日期,如果没有,则将其输出到日志文件。到目前为止,我感到难过,非常感谢任何反馈/帮助。感谢。
答案 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"