我不知道批处理文件是否是解决此问题的正确方法,但我将描述我需要做的事情以及到目前为止我所做的事情。
我使用触发 Robocopy 的批处理文件,然后使用 Blat 将每日文件复制任务的日志文件发送到目标地址。无论复制成功还是失败,我都不想每天发送日志文件,我只想在日志中出现故障时发送日志文件。
下面是我现有批次的一个示例。请注意,我不是程序员,对脚本只有初步的了解。
_____
REM - Daily Copy Procedure
@Echo Off
robocopy.exe "C:\TEMP\Source" "C:\TEMP\Destination" *.* /r:1 /w:1 /nfl /ndl /mt /tee /np /log:"robocopy_1.log"
Blat.exe robocopy_1.log -to emyemailaddress -serverSMTP mysmtpserver
_____
我想在 Robocopy 行和将读取日志文件的 Blat 行之间添加一些内容,如果它在 FAILED 列中检测到大于零的值,那么继续将日志文件发送到我的电子邮件地址,否则退出批处理而不运行布拉特。
Total Copied Skipped Mismatch FAILED Extras
Dirs : 1 0 1 0 0 0
(编辑)
好的,我用一个简单的解决方案解决了我的问题。我可能以最复杂的方式接近它。每当出现问题时,Robocopy 都会在其日志文件中提供详细的错误描述。我所要做的就是获取 bat 文件来解析日志文件中的单词“ERROR”,一切都很好。这个解决方案撒了一张大网,我不是在这里寻找任何技巧,所以一个 IF ELSE 命令就可以了。
REM @ECHO OFF
REM Run Robocopy with appropriate arguments.
robocopy.exe "C:\TEMP\Source" "C:\TEMP\Destination" *.* /r:1 /w:1 /nfl /ndl /s /mt /tee /np /log:"robocopy_1.log"
REM Search for errors in the robocopy logfile and email if any are found.
FIND /c "ERROR" C:\TEMP\robocopy_1.log
IF %errorlevel% equ 1 (EXIT) ELSE (goto mailfile)
REM Email the logfile if problems are found otherwise the BAT will exit before this step.
:mailfile
Blat.exe robocopy_1.log -to myemail -serverSMTP mysmtp