批处理文件给出消息:“1 此时是意外的”

批处理文件给出消息:“1 此时是意外的”

我编写了一个批处理文件来检查服务器是否在线。它使用了一些 cygwin-64 工具。

这是批处理文件:

wget -S http://www.example.com/ -o headers.txt -O index.html
cat http-commands.txt | ncat --idle-timeout 5 -vvv www.example.com 80 >> ncat.txt

unix2dos headers.txt

grep -i apache headers.txt > comparison-now.txt

fc comparison-known-good.txt comparison-now.txt

if %errorlevel% 1 goto email

echo Exit Code is %errorlevel%

if %errorlevel% 0 goto good

:email
del /f /q files.zip
zip -xi ncat.txt index.html headers.txt files.zip
C:\commands\Blat.exe C:\path\message.txt -attach C:\path\files.zip -tf     C:\path\recipients.txt -subject "Example.com Down!" -server relay.server.com -f [email protected] -log C:\path\log.txt -debug -timestamp -overwritelog 


:good
REM Hooray! The server is alive!
exit

输出如下:

1 was unexpected at this time.
C:\path>if 0 1 goto email

也许逻辑应该是这样的,因为只会有两个不同的错误?

if errorlevel 1 do this
.
else do this

答案1

批处理文件给出消息:“1 此时是意外的”

您正在使用:

if %errorlevel% 1 goto email

...

if %errorlevel% 0 goto good

请尝试:

if %errorlevel% equ 1 goto email

...

if %errorlevel% equ 0 goto good

IF——有条件地执行命令

仅当使用 (EQU、NEQ、LSS、LEQ、GTR、GEQ) 之一时,IF 才会解析数字。== 比较运算符始终会导致字符串比较。

IF ERRORLEVEL n 语句应读作 IF Errorlevel >= number

当错误级别为 64 时,如果 ERRORLEVEL 0 将返回 TRUE

检查错误级别的另一种且通常更好的方法是使用 %ERRORLEVEL% 变量:

IF %ERRORLEVEL% GTR 0 Echo An error was found
IF %ERRORLEVEL% LSS 0 Echo An error was found

IF %ERRORLEVEL% EQU 0 Echo No error found
IF %ERRORLEVEL% EQU 0 (Echo No error found) ELSE (Echo An error was found)
IF %ERRORLEVEL% EQU 0 Echo No error found || Echo An error was found

来源IF——有条件地执行命令


进一步阅读

相关内容