IF内的ERRORLEVEL

时间:2010-12-06 15:27:20

标签: batch-file errorlevel

%ERRORLEVEL%偶然发现了一个奇怪的事情,想知道是否有人知道为什么以及是否有办法解决它。从本质上讲,似乎if语句中执行的命令不会设置%ERRORLEVEL%变量。 ERRORLEVEL(在IF ERRORLEVEL 1中,与IF %ERRORLEVEL% EQU 1不同)检查似乎仍然可以正常工作,所以我可以解决它,但它仍然很好能够打印错误级别。用于调试或其他。

@echo off
Set TESTVAR=1

tasklist | find /I "IsntRunning.exe" > NUL
echo OUTSIDE_IF %ERRORLEVEL%

ThisWillSetErrorLevelTo9009ieNotRecognizedCommand

tasklist | find /I "IsntRunning.exe" > NUL
echo OUTSIDE_IF %ERRORLEVEL%

ThisWillSetErrorLevelTo9009ieNotRecognizedCommand

IF %TESTVAR% EQU 1 (
    Set ERRORLEVEL=
    tasklist | find /I "IsntRunning.exe" > NUL
    echo INSIDE_IF  ERRORLEVEL %ERRORLEVEL%

    IF ERRORLEVEL 1 (
        echo INSIDE_IF2  ERRORLEVEL GREQ 1 %ERRORLEVEL%
    )
    IF ERRORLEVEL 2 (
        echo INSIDE_IF2  ERRORLEVEL GREQ 2 %ERRORLEVEL%
    )
    IF ERRORLEVEL 3 (
        echo INSIDE_IF2  ERRORLEVEL GREQ 3 %ERRORLEVEL%
    )
)

tasklist | find /I "IsntRunning.exe" > NUL
echo OUTSIDE_IF ERRORLEVEL %ERRORLEVEL%

@echo on

将其放入批处理文件并运行它会产生以下输出:

  

C:\ Users \用户名\文件\工作> test.bat的
      OUTSIDE_IF 1
      'ThisWillSetErrorLevelTo9009ieNotRecognizedCommand'无法识别为内部或外部命令,       可操作程序或批处理文件       OUTSIDE_IF 1
      'ThisWillSetErrorLevelTo9009ieNotRecognizedCommand'无法识别为内部或外部命令,       可操作程序或批处理文件       INSIDE_IF ERRORLEVEL 9009
      INSIDE_IF2 ERRORLEVEL GREQ 1 9009
      OUTSIDE_IF ERRORLEVEL 1

相关文章:

2 个答案:

答案 0 :(得分:40)

尝试在批处理文件开头使用setlocal enabledelayedexpansion,在!ERRORLEVEL!内使用IF。这似乎对我有用:

@echo off
setlocal enabledelayedexpansion
dir nul
echo %ERRORLEVEL%
if .1.==.1. (
  urklbkrlksdj - not a command
  echo %ERRORLEVEL%
  echo !ERRORLEVEL!
)

答案 1 :(得分:0)

if errorlevel的工作方式没有延迟扩展,但其工作方式类似于

if %errorlevel% <= Some_Value ...

@echo off

::sets errorlevel to 0
(call )
if "1" == "1" (
    rem sets errorlevel to 5
    cmd /c exit 5
    if errorlevel 4 echo this will be printed
    if errorlevel 5 echo this will be printed
    rem :::: you can use this ::::::::::::::
    if errorlevel 5 if not errorlevel 6 echo this will be printed ONLY when the errorlevel is 5
    rem :::::::::::::::::::::::::::::::::::::
    if errorlevel 6 echo this will not be printed

)