我不知道批处理文件是否是解决此问题的正确方法,但我将描述我需要做什么以及到目前为止我做了什么。
我使用批处理文件触发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
答案 0 :(得分:0)
for /f "tokens=6" %%i in ('findstr /b "Dirs :" robocopy.log') do set fails=%%i
if %fails%=0 exit
在日志文件中查找以“Dirs:”开头的行,并将第六个标记存储在变量中(标准分隔符:空格,制表符,逗号,点;所以第一个标记= Dirs
,第二个标记= { {1}}等...)