我是脚本新手,所以这个答案可能很简单,但我还没有能够使用Google找到它。无论如何,我需要创建一个批处理脚本,如果它发现某个文件的创建日期不是当前日期,它将发送通知电子邮件。
更大的图片: 我正在备份一个非常小的数据库,并创建了一个脚本,通过网络将数据库复制到共享文件。我需要确保每天都重写该文件,并且我知道如何将创建日期与今天的日期进行比较,然后启动"成功"或者"失败"用它发现的电子邮件。以下是我到目前为止所做的工作,但不确定我需要做什么工作,或者即使我走的是正确的道路。
cd /
cd /Ppak Backup
dir /T:C engine.db
if !filedate! == %DATE% (C:\Users\administrator.BENCHMARK\Desktop\sendEmail.exe -f copier@benchmarkwoodworks.com -t backup@erootsohio.com -u backup -m backup successful -s smtp.office365.com:25 -xu copier@benchmarkwoodworks.com -xp xxxxxxx) else (C:\Users\administrator.BENCHMARK\Desktop\sendEmail.exe -f copier@benchmarkwoodworks.com -t backup@erootsohio.com -u backup -m backup fail -s smtp.office365.com:25 -xu copier@benchmarkwoodworks.com -xp xxxxxxx)
答案 0 :(得分:0)
运行forfiles /?
,您将看到一个有用命令的帮助页面,该命令将允许您根据日期条件选择文件并对这些文件运行命令。
在您的具体情况下,您可以通过以下日期找到该文件:
forfiles /D 0 /P "\Ppak Backup" /M engine.db /C "path\sendEmail.exe -m succeeded ..."
......如果是昨天或更早的日期:
forfiles /D -1 /P "\Ppak Backup" /M engine.db /C "path\sendEmail.exe -m failed ..."
为了便于阅读,我没有复制您的电子邮件的完整路径和参数。正如您在帮助页面中看到的那样,forfiles
还允许您在.exe的参数中包含@fdate
和@ftime
等变量(如果需要)。
编辑:重新创建与上次修改的评论,我认为可以使用上次修改日期。实际上,您可能必须使用上次修改后的内容,例如:每次备份都会覆盖相同的文件(vs删除和替换)。要查看是否属于这种情况,请将DIR /TC engine.db
的输出与dir engine.db
进行比较。如果您真的必须按创建日期进行操作,则无法使用forfiles
。以下是DIR /TC
的替代方案。 (%DATE1:~4%
部分从%DATE%
剥离工作日缩写,可能需要修改非美国语言环境。)
SETLOCAL
SET DATE1=%DATE%
FOR /F %%D IN ('DIR /TC "\Ppak Backup\engine.db" ^| FIND ".db"') DO IF %%D==%DATE1:~4% (path\sendEmail.exe -m succeeded ...) ELSE path\sendEmail.exe -m failed ...
顺便说一下,你的例子使用正斜杠(/
)有点不寻常。坚持使用Windows'和DOS'习惯反斜杠(\
)即使在某些情况下你可以逃脱/
。猜猜你有一个* nix背景......另外,你的例子中的第一个CD
什么也没做,而且在大多数情况下,在这种情况下根本没有理由改变工作目录,只需指定命令中执行所需操作的完整路径。
另一个想法:如果备份恰好丢失,上述两种变体都不会发送任何电子邮件,问题中没有提及。您可以考虑添加IF NOT EXIST
左右以涵盖该案例。