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 执行时有什么区别?

最佳答案

通过使用

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

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

命令行
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!

现在 & 运算符被转义为当前命令进程被解释为文字字符,因此整行执行时插入符号 ^ 被新命令进程删除。

关于windows - cmd提示符和win32_process上ERRORLEVEL延迟扩展的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41733606/

10-12 21:43