Windows 正在查找批处理脚本以监视文件的上次修改日期

Windows 正在查找批处理脚本以监视文件的上次修改日期,windows,batch-file,Windows,Batch File,我的公司有很多通过批处理脚本在一夜之间运行的自动化。大多数情况下只是在这里和那里复制新文件。我要寻找的是一种在所有脚本运行后检查文件创建日期/上次修改日期的方法,以确保所有内容都是最新的。它基本上会查找共享驱动器或UNC路径中的特定文件。如果该文件不到24小时,请不要执行任何操作。如果主题文件超过24小时,则触发电子邮件。我已经有一个VBS来发送电子邮件,所以我可以在IF语句的末尾添加它。非常感谢您的帮助。您可以通过在(file.txt)中获取%a的文件修改日期do echo%~ta(成批文件中

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

您可以通过
在(file.txt)中获取%a的文件修改日期do echo%~ta
(成批文件中的
%
翻一番)

有很多方法

下面是一个例行程序,它将按照您概述的思路做一些事情:

@ECHO关闭
SETLOCAL
::删除开始时的变量$
对于/F“delims=”('set$2^>Nul')中的%%a,请执行设置“%%a=”
设置“sourcedir=U:\sourcedir”
设置“runflag=runflag.###”
设置“foundrun=”
属性-h“%sourcedir%\runflag.###”
对于/f“tokens=1,2 delims=:”%%a IN('dir/b/od/a-d”%sourcedir%“^ findstr/n/r“^”)DO(
如果%%b==%runflag%设置为foundrun=Y
如果未定义foundrun集“$%%a=%%b”
)
(
ECHO(旧文件列表)
对于/F“tokens=1,2delims==”('set$2^>Nul')中的%%a执行回显(%%b
)>%sourcedir%\%runflag%“
ATTRIB+h“%sourcedir%\runflag.###
如果定义了$1 ECHO(发送电子邮件
后藤:EOF
您需要更改
sourcedir
的设置以适应您的环境。
runflag
只是一个方便的文件名

这里的目标是查找自上一次运行此例程以来未更新的文件。这克服了固定的“24小时”概念-在节假日、周末等情况下

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


我在这里玩了
hidden
标志,以隐藏文件,使其不被“这不应该在这里-我不明白。我将删除它”。(采取这种态度的人通常会被简单的+H和+R击败)。根据需要改进或删除ATTRIB命令。

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

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

这无疑让我走上了正确的轨道。但是,如果我在批处理文件中运行该命令,我不会收到结果。“对于(C:\PROJECTS\results.txt)中的%a,请执行echo%~ta>C:\PROJECTS\NAVIS\u MONITOR.txt”。如果我将字符串复制并粘贴到cmd提示符,它将工作正常,然后我可以执行FC并获得所需的内容。但是,当我从批处理文件中运行该行时,我什么也得不到。在批处理文件中,必须写入两次
%%
,而不是只写入
%%
。有关输入命令提示符时的输出,请参阅有关命令
的帮助请选择
帮助获取
获取/?
。谢谢您的帮助。这让我开始了。