ERRORLEVEL 条件

ERRORLEVEL conditions

这个逻辑不应该将 0 和 1 错误级别发送到 'mailerror' 子例程并在它们是 0 或 1 错误时简单地退出吗?

IF %ERRORLEVEL% NEQ 0 (
    IF %ERRORLEVEL% NEQ 1 (   
    SET BODY="exit error code from Backup of RAD file = %ERRORLEVEL%."
    goto mailerror
    )
 ) ELSE (
 EXIT
 )

首先,您不需要所有这些括号。此外,您当前正在测试错误级别 0,然后是 1,但是您的 else 位于错误的位置,因此 errorlevel 1 子句将不执行任何操作(不退出):

这将在 errorlevel 0errorlevel 1

上测试并退出操作
@echo off
if %errorlevel% neq 0 if %errorlevel% neq 1 (
set BODY="exit error code from Backup of RAD file = %errorlevel%."
echo %body%
goto mailerror
)
exit
:mailerror
echo %BODY%
echo do something else..

但是看到你想做除错误级别 01 之外的任何事情,你可以简单地做 set if %errorlevel% greater than 1 (换句话说不是 01):

@echo off
if %errorlevel% GTR 1 (
set BODY="exit error code from Backup of RAD file = %errorlevel%."
goto mailerror
)
exit
:mailerror
echo %BODY%
echo do something else..

根据 @Stephan 的评论。一些罕见的程序会产生负错误级别,如果是这种情况,第一个选项就可以,或者这个:

@echo off
if %errorlevel% GTR 1 if %errorlevel% lss 0 (
set BODY="exit error code from Backup of RAD file = %errorlevel%."
goto mailerror
)
exit
:mailerror
echo %BODY%
echo do something else..

如果错误是 01:

,您的问题措辞表明您想要 Exit
IF %ERRORLEVEL% GEQ 0 IF %ERRORLEVEL% LEQ 1 EXIT /B
REM MAILERROR CODE BELOW HERE