检测具有If语句的Windows 8 CMD脚本中的错误

时间:2014-06-04 20:30:07

标签: cmd

我注意到Windows中的错误。我有一个简单的控制台应用程序返回-12。和.cmd脚本,使用ERRORLEVEL和%ERRORLEVEL%NEQ 0检查返回值。当检查未嵌套在IF语句中时,脚本始终有效。当它嵌套在IF语句中时,每次运行脚本时脚本检测到的返回值都会更改。第一次脚本没有检测到错误。第二次,脚本正确检测到错误-12。在第3次和后续运行中,脚本报告错误1。

这是脚本:

    @echo off

    IF "%1" NEQ "" (

    ECHO RUNNING %1
    %1
    IF ERRORLEVEL 1 (
     ECHO %1 returned positive value %ERRORLEVEL%
     EXIT /B 1
    )

    IF %ERRORLEVEL% NEQ 0 (
     ECHO %1 returned %ERRORLEVEL%
     EXIT /B 1
    )
   )

1 个答案:

答案 0 :(得分:2)

您需要 setlocal enabledelayedexpansion

@echo off
setlocal enableextensions enabledelayedexpansion
if "%1" NEQ "" (
  echo running %1 %2 %3 %4 %5 %6 %7
  %1 %2 %3 %4 %5 %6 %7
  if errorlevel 1 (
    echo %1 returned positive value !ERRORLEVEL!
    exit /b 1
  )
  if !ERRORLEVEL! NEQ 0 (
    echo %1 returned !ERRORLEVEL!
    exit /b 1
  )
)
endlocal