2

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

我使用触发 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
4

1 回答 1

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

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

于 2015-02-13T19:21:39.323 回答