在cmd提示符和win32_process上延迟扩展ERRORLEVEL的差异

cmd /V:ON /c dir c:\<some non existing directory> & echo %ERRORLEVEL% Volume in drive C is PC COE Volume Serial Number is 9C37-D0B7 Directory of c:\ File Not Found 0 

让我们使用相同的命令! 扩展ERRORLEVEL(启用延迟扩展)

 cmd /V:ON /c dir c:\ERt & echo !ERRORLEVEL! Volume in drive C is PC COE Volume Serial Number is 9C37-D0B7 Directory of c:\ File Not Found !ERRORLEVEL! 

它打印!错误!

当我使用WMI win32_process create命令运行该命令并且使用!ERRORLEVEL返回适当的错误时,这样做工作正常! variables

在cmd提示符下执行并使用WMI win32_process执行时会有什么不同?

通过使用

 cmd /V:ON /c dir c:\ERt & echo !ERRORLEVEL! 

cmd /V:ON开头的新命令进程cmd /V:ON只执行命令dir c:\ERt然后关闭,第二个命令echo !ERRORLEVEL! 由不进行延迟扩展的电流指令处理执行。

命令行

 cmd /V:ON /c "dir c:\ERt & echo !ERRORLEVEL!" 

必须用来运行dir c:\ERtecho !ERRORLEVEL! 在退出此命令过程之前的新命令过程中。

在整个命令行周围的双引号在新的命令过程中执行是有区别的。

如果没有命令行周围的双引号在新的命令过程中执行,则当前命令过程在输入时用这两个命令解释该行

 cmd /V:ON /c dir c:\ERt echo !ERRORLEVEL! 

也有可能的

 cmd /V:ON /c dir c:\ERt ^& echo !ERRORLEVEL! 

现在&运算符被转义为当前命令进程被解释为文字字符,因此整个线路被执行,脱字符被新命令进程删除。