batch file的奇怪行为

我有两个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,那么会打印出来:

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

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

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

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

你也可以使用这个语法而不会延迟扩展:

 if errorlevel 1 if not errorlevel 2 ( echo error )