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

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

Я использую пакетный файл, запускающий 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 файла журнала на мой адрес электронной почты, в противном случае выйдите из пакета без работает Блат.

     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

1 ответ

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

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

Другие вопросы по тегам