2

バッチファイルがこの問題の適切な解決策であるかどうかはわかりませんが、何をする必要があるか、これまでに何をしたかを説明します。

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
4

1 に答える 1

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

ログファイルで「Dirs :」で始まる行を探し、変数に 6 番目のトークンを格納します (標準の区切り文字: スペース、タブ、コンマ、ドット。つまり、最初のトークン = Dirs、2 番目のトークン =:など...)

于 2015-02-13T19:21:39.323 に答える