寻找批处理脚本来监视文件的最后修改日期

时间:2014-09-11 21:33:58

标签: windows batch-file

我的公司有很多通过批处理脚本在一夜之间运行的自动化。主要是在这里和那里复制新文件。我正在寻找的是一种在所有脚本运行后检查文件创建日期/最后修改日期的方法,以确保一切都是最新的。它基本上会查找共享驱动器或UNC路径中的特定文件。如果该文件少于24小时,则不执行任何操作。如果主题文件是OLDER超过24小时,则触发电子邮件。我已经有一个VBS发送电子邮件,所以我可以在IF语句的末尾添加它。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:1)

有方法和手段......

这是一个例程,可以按照你概述的方式做一些事情:

@ECHO Off
SETLOCAL

:: remove variables starting $
FOR  /F "delims==" %%a In ('set $ 2^>Nul') DO SET "%%a="
SET "sourcedir=U:\sourcedir"
SET "runflag=runflag.###"
SET "foundrun="
ATTRIB -h "%sourcedir%\runflag.###"
FOR /f "tokens=1,2delims=:" %%a IN ('dir /b /od /a-d "%sourcedir%"^|findstr /n /r "^"') DO (
 IF %%b==%runflag% SET foundrun=Y
 IF NOT DEFINED foundrun SET "$%%a=%%b"
)
(
 ECHO(Old file list
 FOR  /F "tokens=1,2delims==" %%a In ('set $ 2^>Nul') DO ECHO(%%b
)>"%sourcedir%\%runflag%"
ATTRIB +h "%sourcedir%\runflag.###"
IF DEFINED $1 ECHO(send email
GOTO :EOF

您需要更改sourcedir的设置以适合您的具体情况。 runflag只是一个方便的文件名。

此处的对象是查找自上次运行此例程以来尚未更新的文件。这可以解决固定的“24小时”问题 - 如果是假期,周末等等。

未更改的文件名称将位于runflag.###中 - 非常适合在blat等邮件程序中使用。

我在这里玩hidden标志 - 隐藏文件“这不应该在这里 - 我不明白。我会删除它”。 (采取这种态度的人可能常常被简单的+ H和+ R击败)。尽可能改进或删除ATTRIB命令。

答案 1 :(得分:0)

您可以使用for %a in (file.txt) do echo %~ta获取文件修改日期(批处理文件中%的两倍)

答案 2 :(得分:0)

更改\\server\share并使用文件名代替filename.ext,如果文件超过1天,则应启动email.bat文件。

robocopy "\\server\share" "%temp%" filename.ext /minage:1 /L |find " New File " >nul && call email.bat