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

时间:2016-10-13 07:25:10

标签: batch-file

下面是我现在正在使用的代码,它正在运行,但第二个if命令报告没有停机时关闭,请帮助我并指出我错误的地方,

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 个答案:

答案 0 :(得分:1)

您的代码所做的是

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

if errorlevel == 0

并且在这里,在第二个错误级别检查中存在歧义:您不知道您正在检查的错误级别值是由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