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