Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 创建批处理脚本以在文件的创建日期不是今天时发送电子邮件_Windows_Email_Batch File_Batch Processing - Fatal编程技术网

Windows 创建批处理脚本以在文件的创建日期不是今天时发送电子邮件

Windows 创建批处理脚本以在文件的创建日期不是今天时发送电子邮件,windows,email,batch-file,batch-processing,Windows,Email,Batch File,Batch Processing,我对脚本编写还不熟悉,所以这个答案可能很简单,但我还没有在谷歌上找到它。无论如何,我需要创建一个批处理脚本,如果它看到某个文件的创建日期不是当前日期,就会发送一封通知电子邮件 大图: 我正在备份一个非常小的数据库,并创建了一个脚本,通过网络将数据库复制到一个共享文件中。我需要确保文件每天都被重新写入,我知道的最好的方法是将创建日期与今天的日期进行比较,然后根据发现的内容发送一封成功或失败的电子邮件。下面是我到目前为止所拥有的,但不确定我还需要什么才能让它工作,甚至我是否走上了正确的道路 cd /

我对脚本编写还不熟悉,所以这个答案可能很简单,但我还没有在谷歌上找到它。无论如何,我需要创建一个批处理脚本,如果它看到某个文件的创建日期不是当前日期,就会发送一封通知电子邮件

大图: 我正在备份一个非常小的数据库,并创建了一个脚本,通过网络将数据库复制到一个共享文件中。我需要确保文件每天都被重新写入,我知道的最好的方法是将创建日期与今天的日期进行比较,然后根据发现的内容发送一封成功或失败的电子邮件。下面是我到目前为止所拥有的,但不确定我还需要什么才能让它工作,甚至我是否走上了正确的道路

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)
运行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等变量

编辑:在“创建”和“上次修改”之间重新添加注释,我认为可以使用上次修改的日期。事实上,如果每次备份都覆盖而不是删除并替换同一文件,则您可能必须使用上次修改。要查看是否是这种情况,请将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习惯的反斜杠\即使在某些情况下,您可以使用/。我猜你有一个尼克斯的背景。。。此外,示例中的第一张CD不起任何作用,在大多数情况下,根本没有理由更改工作目录。在这种情况下,只需在命令中指定执行所需操作的完整路径即可

另一个想法是:如果备份碰巧丢失,上述两种变体都不会发送任何电子邮件,问题中没有提到这一点。您可能需要考虑添加一个如果不存在的文件来覆盖该情况。

运行FoFrords/?您将看到帮助页面中的有用命令,该命令允许您根据日期条件选择文件并对这些文件运行命令

在您的具体案例中,如果该文件的日期为今天,您可以找到:

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等变量

编辑:在“创建”和“上次修改”之间重新添加注释,我认为可以使用上次修改的日期。事实上,如果每次备份都覆盖而不是删除并替换同一文件,则您可能必须使用上次修改。要查看是否是这种情况,请将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习惯的反斜杠\即使在某些情况下,您可以使用/。我猜你有一个尼克斯的背景。。。此外,示例中的第一张CD不起任何作用,在大多数情况下,根本没有理由更改工作目录。在这种情况下,只需在命令中指定执行所需操作的完整路径即可


另一个想法是:如果备份碰巧丢失,上述两种变体都不会发送任何电子邮件,问题中没有提到这一点。您可能想考虑添加一个如果不存在的话来覆盖该情况。

谢谢您的回复。我以前确实使用过forfiles,但我这样做的时候,它只引用了修改的日期,而不是创建的日期。我今天将试一试,看看这能否解决问题。非常感谢。我今天正在查看它,并将尽快更新。@Eroots,我很高兴听到它起作用了。请同时将答案标记为已接受。那很值得。谢谢你的回复。我以前确实使用过forfiles,但我这样做的时候,它只引用了修改的日期,而不是创建的日期。我今天将试一试,看看这能否解决问题。非常感谢。我今天正在查看它,并将尽快更新。@Eroots,我很高兴听到它起作用了。请同时将答案标记为已接受。这是值得的。