批处理文件的奇怪行为

时间:2013-09-09 12:48:57

标签: windows batch-file cmd

我有两个cmd文件。 child.cmd:

@echo off
exit 1

parent.cmd:

@echo off
cmd /C child.cmd
if %errorlevel% EQU 0 (
   echo OK
) else (
   echo ERROR
)

如果要运行parent.cmd,则将打印ERROR。

但如果稍微更改parent.cmd,则会打印OK:

@echo off
if "YES" EQU "YES" (
   cmd /C child.cmd
   if %errorlevel% EQU 0 (
      echo OK
   ) else (
      echo ERROR
   )
)

为什么在第二个例子中打印好了?

2 个答案:

答案 0 :(得分:5)

在代码块中,您需要delayed expansion才能访问%variables%

 @echo off &setlocal enabledelayedexpansion
 if !errorlevel! EQU 0 (

答案 1 :(得分:1)

您也可以使用此语法而不延迟扩展:

if errorlevel 1 if not errorlevel 2 ( echo error )