IF内的ERRORLEVEL

Sre*_*kel 34 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
Run Code Online (Sandbox Code Playgroud)

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

C:\ Users\username\Documents\work> test.bat
OUTSIDE_IF
1'WhisWillSetErrorLevelTo9009ieNotRecognizedCommand'无法识别为内部或外部命令,可运行程序或批处理文件.
OUTSIDE_IF
1'WhisWillSetErrorLevelTo9009ieNotRecognizedCommand'未被识别为内部或外部命令,可运行程序或批处理文件.
INSIDE_IF ERRORLEVEL 9009
INSIDE_IF2 ERRORLEVEL GREQ 1 9009
OUTSIDE_IF ERRORLEVEL 1

相关文章:

Jim*_*vis 42

尝试使用setlocal enabledelayedexpansion在批处理文件的开始,和!ERRORLEVEL!里面的IF.这似乎对我有用:

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

  • 哇谢谢.这有效甚至可以解释它.作为参考,我发现了一些链接:http://batcheero.blogspot.com/2007/06/how-to-enabledelayedexpansion.html | http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/setlocal.mspx?mfr=true (5认同)
  • 正是这样的时刻让您明白为什么 linuxers 鄙视 Windows。你不会相信我在这个看似简单的小点子上浪费了多少时间。 (3认同)