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