在Windows批处理脚本中使用ERRORLEVEL进行错误处理

在Windows批处理脚本中使用ERRORLEVEL进行错误处理,windows,batch-file,Windows,Batch File,我们的脚本中有一些错误处理设置,如图所示: set ret = %ERRORLEVEL% if %ERRORLEVEL% == 0 GOTO PPCOK if not %ret% == 0 GOTO ERROR1 上面是别人写的,但是我对它是否能正常工作有一些担心 我已经读到,如果你检查ERRORLEVEL=0,实际上就是检查ERRORLEVEL是否为0或更高。我的假设是,它将始终属于PPCOK标签 此外,web上的大多数示例都使用“IF ERRORLEVEL 1”或某些示例显示“IF%ERR

我们的脚本中有一些错误处理设置,如图所示:

set ret = %ERRORLEVEL%
if %ERRORLEVEL% == 0 GOTO PPCOK
if not %ret% == 0 GOTO ERROR1
上面是别人写的,但是我对它是否能正常工作有一些担心

  • 我已经读到,如果你检查ERRORLEVEL=0,实际上就是检查ERRORLEVEL是否为0或更高。我的假设是,它将始终属于PPCOK标签

  • 此外,web上的大多数示例都使用“IF ERRORLEVEL 1”或某些示例显示“IF%ERRORLEVEL%EQU 1”以及更高版本使用“IF%ERRORLEVEL%==0”。我想知道是否有一个有效的案例可以选择这三种方法中的哪一种


  • 另一方面,我不知道为什么他们将errorlevel存储在另一个变量中,并在第二个if语句中使用它,而不是仅仅执行另一个if not%errorlevel%…

    批处理对
    SET
    语句中的空格很敏感
    SET FLAG=N
    将名为“FLAGSpace”的变量的值设置为“SpaceN”


    如果ERRORLEVEL n
    为真,如果
    ERRORLEVEL
    为n或大于n<如果ERRORLEVEL 0因此始终为真,则代码><代码>如果不是ERRORLEVEL 1,则测试ERRORLEVEL=0。如果%ERRORLEVEL%==0,则
    也是如此,但前者可以在块内使用,后者不能。实际上,错误级别被视为有符号的数量。因此,
    如果错误级别0
    并不总是为真,如果错误级别为负以及为零,
    如果不是错误级别1
    将为真。不,
    如果%errorlevel%==0
    只有在错误级别实际为零时才为真。在我看来,这种方法通常更可取,尽管在有人创建了名为
    ERRORLEVEL
    的环境变量的病理情况下,它会失败。您认为不需要使用
    ret
    变量是正确的,事实上,如果第二个
    语句是完全冗余的,您可以说
    GOTO error 1