windows - 从 VBScript 中的 cmd/c 命令获取返回值

标签 windows vbscript

在 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/

相关文章:

c++ - 如何使用 C++ Win32 API 计算两个日期之间的天数?

windows - "Unloaded"前缀在 Windows 堆栈跟踪中意味着什么?

c++ - SHDeleteKey 和 RegDeleteTree 有什么区别?

function - vbscript函数语法错误

vbscript - 如何在不使用Cscript/Wscript的情况下从命令行运行VBScript

windows - 合并大量文件,仅包括部分文件名

python - 使用 python 2.7.3 和 pysqlite2 2.6.3 升级 sqlite3 版本

windows - 用于从网络适配器中删除静态配置的 DNS 地址的 Powershell Cmdlet

javascript - 如何使用 javascript/VBScript 读取 excel 2007 文件 (xlsx)

使用 movefolder 方法时找不到 vbscript 错误路径