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

4
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创建命令并使用!ERRORLEVEL!变量返回适当的错误时,这个命令可以正常工作。

在命令提示符中执行和使用WMI win32_process执行有什么区别?


1
“echo” 命令在父级 “cmd” 实例的范围内运行,但不在您明确启动的实例中运行;编写 “^&” 以转义和号,使其在预期的 “cmd” 实例中执行... - aschipfl
1个回答

4
通过使用
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:\ERtecho !ERRORLEVEL!来运行新的命令进程。

在新命令进程中执行整个命令行周围的双引号会产生不同的效果。

如果没有在新命令进程中执行命令行周围加上双引号,则当前命令进程将解释这两个命令,就像在键入时一样。

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

也有可能的是:
cmd /V:ON /c dir c:\ERt ^& echo !ERRORLEVEL!

现在,& 运算符被转义为当前命令进程中的字面字符,因此整行命令将被新的命令进程执行,同时插入符号 ^ 将被移除。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接