Пакетный файл для обнаружения сбоя в файле журнала, а затем по электронной почте?

Я не знаю, является ли пакетный файл правильным решением этой проблемы, но я опишу, что мне нужно сделать и что я уже сделал.

Я использую пакетный файл, запускающий 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 для анализа файла журнала на наличие слова «ОШИБКА», и все в порядке. Это решение забрасывает широкую сеть, я не ищу здесь никаких изысков, поэтому команда 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

person Eduardo Correa-Lima Vorum    schedule 13.02.2015    source источник


Ответы (1)


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

ищет в лог-файле строку, начинающуюся с «Dirs :», и сохраняет шестой токен в переменной (стандартные разделители: пробел, табуляция, запятая, точка; поэтому первый токен = Dirs, второй токен = : и т. д.)

person Stephan    schedule 13.02.2015
comment
Здравствуйте, спасибо за ваш вклад. Я предполагаю, что аргумент /f необходим сразу после for и перед tokens=6 Я включил ваше предложение, но получаю сообщение об ошибке, которое было неожиданным в настоящее время. - person Eduardo Correa-Lima Vorum; 14.02.2015
comment
Эдуардо: Аааа... JosefZ: еще аааа.... Спасибо вам обоим. Я не должен отвечать на вопросы слишком поздно ночью ^^ - person Stephan; 14.02.2015