Arquivo em lote dá mensagem: "1 foi inesperado neste momento"

0

Eu escrevi um arquivo de lote que verifica se um servidor está online. Ele usa algumas ferramentas do cygwin-64.

Aqui está o arquivo em lotes:

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

A saída está abaixo:

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

Talvez a lógica deva ser essa, já que só haverá dois erros diferentes?

if errorlevel 1 do this
.
else do this
    
por Justin Goldberg 05.12.2014 / 14:57

1 resposta

1

Arquivo em lote exibe a mensagem: "1 foi inesperado no momento"

Você está usando:

if %errorlevel% 1 goto email

...

if %errorlevel% 0 goto good

Tente:

if %errorlevel% equ 1 goto email

...

if %errorlevel% equ 0 goto good

IF - Condiciona condicionalmente um comando

IF will only parse numbers when one of (EQU, NEQ, LSS, LEQ, GTR, GEQ) is used. The == comparison operator always results in a string comparison.

IF ERRORLEVEL n statements should be read as IF Errorlevel >= number

IF ERRORLEVEL 0 will return TRUE when the errorlevel is 64

An alternative and often better method of checking Errorlevels is to use the %ERRORLEVEL% variable:

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

Fonte IF - Condicionalmente executar um comando

Leitura Adicional

por 05.12.2014 / 15:17