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

时间:2017-01-19 04:12:30

标签: windows batch-file cmd

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!

它打印!ERRORLEVEL!。

当我使用WMI win32_process create命令运行命令并使用!ERRORLEVEL返回正确的错误时,这确实可以正常工作!变量

在cmd提示符中执行并使用WMI win32_process执行时,它有何不同。?

1 个答案:

答案 0 :(得分:4)

使用

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

cmd /V:ON启动的新命令进程仅执行命令dir c:\ERt然后关闭,第二个命令echo !ERRORLEVEL!由当前命令进程执行,在该进程上未启用延迟扩展。 / p>

命令行

cmd /V:ON /c "dir c:\ERt & echo !ERRORLEVEL!"
在退出此命令进程之前,必须使用

在新命令进程中运行dir c:\ERt AND echo !ERRORLEVEL!

在新命令进程中执行的整个命令行的双引号会产生差异。

如果在命令行周围没有双引号来执行新命令处理,当前命令进程会在输入时用两个命令解释该行

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

也可能是

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

现在&运算符被转义,因为当前命令进程被解释为文字字符,因此整行都是在新命令进程删除的符号字符^的情况下执行的。