2016-10-13 17 views
0

以下は私のコードです。今は使用していますが、動作していますが、2番目のコマンドがダウンしていると報告しています。 ERRORLEVELどうかは知らない:どのようなあなたのコードが行うこと最初のテストで失敗した場合、バッチファイルを2回実行してテストしたい

check server 
if errorlevel == 0 (
    send mail 
) else (
    check server 
) 

if errorlevel == 0 

であり、ここで、第二エラーレベルチェックにあいまいさがある私を助け、私は間違いをしたところを指摘し、

echo on 
setlocal 
set itemail= "mail id" 
C: 
cd\ 
cd batch 
Call utltest.cmd >status.txt 
ServerTester.exe -services acgenpszrwbklquf >>status.txt 
if %errorlevel%==0 (
wmailto mailid -s"UP - Health Monitoring." -tstatus.txt" 
) else (
c: 
cd\ 
cd batch 
Call utltest.cmd >status.txt 
ServerTester.exe -services acgenpszrwbklquf >>status.txt 
) 
if %errorlevel%==0 (
wmailto mailid -s"UP - Health Monitoring." -tstatus.txt" 
) else (wmailto %itemail% -s"DOWN - WebServices Health Monitoring." -tstatus.txt 
) 

:eof 

答えて

1

あなたが確認している値は、send mailまたはcheck serverによって生成されました

簡略化して、コードを複製しないでください。テスト成功のためのチェックをループするだけです。私たちは小切手の限界に達した場合は遅延拡大の問題を回避するには、エラー

@echo off 
    setlocal enableextensions enabledelayedexpansion 

    set "itemail=mail id" 

    pushd "c:\batch" || goto :eof 

    set "tries=2" 
    for /l %%a in (1 1 %tries%) do (
     >status.txt (
      call utltest.cmd 
      ServerTester.exe -services acgenpszrwbklquf 
     ) 

     echo The ServerTester returned errorlevel : !errorlevel! 

     if not errorlevel 1 (
      wmailto "%itemail%" -s"UP - Health Monitoring." -tstatus.txt 
      goto :eof 
     ) 
     if %%a equ %tries% (
      wmailto "%itemail%" -s"DOWN - WebServices Health Monitoring." -tstatus.txt 
     ) 
    ) 

のお知らせ、コードがif errorlevel nを使用しています。この方法では、変数(%errorlevel%)の値を読み取るのではなく、利用可能なif構文を使用して現在のerrorlevelをチェックしています。

+0

エラーが発生したときにテスターが別の値を返すので、エラーコード1も考慮する必要があります。エラーがない場合は、1行のロジックを変更する必要があります。 1)、differetの組み合わせでテストしています(errorlevel == 0の場合、errorlevelが0の場合は%% a equ 0)、このロジックを編集するにはどうすればいいですか –

+0

@ T.Anand、 'errorlevel n'がエラーレベル値*以上であればtrueに評価され、' n'に等しいと判断されます。したがって、エラーレベル1でない場合は、エラーレベルが0以上であれば* "エラーレベルが1以上でない場合*"を意味します*。異なる値をチェックする場合は、より大きい値から小さい値に 'errorlevel n 'を使用してください。 –

+0

ありがとうございました!!!しかし、一般的に "そうではない場合"を意味するわけではなく、私の関心事はここでは、(EQU、NTQ、GTQ、GTR)のような比較演算子を使用していない場合、スクリプトが "errorlevelが0 「エラーレベル1でなければ」「これは私の混乱です。 –

関連する問題