下面是我现在使用的代码,它正在工作,但是第二个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
。