如果第一次测试失败,如何运行批处理文件对服务器进行两次测试



下面是我现在使用的代码,它正在工作,但是第二个if命令在没有down时报告down,请帮助我并指出我犯的错误,

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

你的代码做的是

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

在这里,在第二个errorlevel检查中有一个歧义:您不知道您正在检查的errorlevel值是由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

最新更新