批处理文件,以检测日志文件中的失败然后发​​送电子邮件?

时间:2015-02-13 19:03:24

标签: batch-file boolean robocopy logfile blat

我不知道批处理文件是否是解决此问题的正确方法,但我将描述我需要做什么以及到目前为止我做了什么。

我使用批处理文件触发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列中检测到大于零的值,那么继续将日志文件Blat到我的电子邮件地址,否则退出没有运行Blat的批处理。

     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

1 个答案:

答案 0 :(得分:0)

for /f "tokens=6" %%i in ('findstr /b "Dirs :" robocopy.log') do set fails=%%i
if %fails%=0 exit

在日志文件中查找以“Dirs:”开头的行,并将第六个标记存储在变量中(标准分隔符:空格,制表符,逗号,点;所以第一个标记= Dirs,第二个标记= { {1}}等...)