バッチファイルがこの問題の適切な解決策であるかどうかはわかりませんが、何をする必要があるか、これまでに何をしたかを説明します。
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 列で 0 より大きい値が検出された場合は、ログファイルを自分のメール アドレスに送信し、それ以外の場合はバッチを終了します。ブラットを実行しています。
Total Copied Skipped Mismatch FAILED Extras
Dirs : 1 0 1 0 0 0
(編集)
さて、私は簡単な解決策で問題を解決しました。おそらく最も複雑な方法でアプローチしていました。Robocopy は、何か問題が発生するたびに、ログファイルに詳細なエラーの説明を提供します。私がしなければならなかったのは、「エラー」という単語のログファイルを解析するためにバットファイルを取得することだけでした。このソリューションは幅広いネットをキャストします。私はここでどんな種類のフィネスも探していないので、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