我编写了一个批处理文件来检查服务器是否在线。它使用了一些 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
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 如果- 有条件地执行命令。