在 VBScript 中,内置的 Shell.Run
方法不提供输出重定向,因此必须使用以下解决方法:
Running command line silently with VbScript and getting output?
Dim retVal
retVal = WshShell.Run( "cmd /c ""commandGoesHere"" > c:\temp\output.txt", 0, True )
然而,returnValue
将具有 cmd
的返回值,而不是 commandGoesHere
的返回值。
我以为我可以检查 shell.Environment("ERRORLEVEL")
但大概这也是 cmd
的返回值,而不是 commandGoesHere
.
...那么如何获取 commandGoesHere
的返回值并同时将其输出重定向到另一个文件?
最佳答案
returnValue = WScript.CreateObject("WScript.Shell").Run( _
"cmd /v /c (>""output.txt"" ""commandGoesHere"" & exit !errorlevel!)" _
, 0 _
, True _
)
在启用延迟扩展(/v
)的情况下启动cmd
实例,并在errorlevel
下退出cmd
实例> 由上一个命令设置。
需要延迟扩展,因为 cmd
解析器在行/ block 解析阶段将所有 %var%
读取操作替换为变量内的值。如果没有延迟扩展 (%errorlevel%
),exit
命令返回的值将在开始执行命令之前被检索。对于延迟扩展 (!errorlevel!
),将在 commandGoesHere
结束后执行 exit
命令时检索该值。
关于windows - 从 VBScript 中的 cmd/c 命令获取返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41778613/