从VBScript

时间:2017-01-21 11:12:02

标签: 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的返回值同时将其输出重定向到另一个文件?

1 个答案:

答案 0 :(得分:3)

returnValue = WScript.CreateObject("WScript.Shell").Run( _ 
    "cmd /v /c (>""output.txt"" ""commandGoesHere"" & exit !errorlevel!)" _ 
    , 0 _ 
    , True _ 
)

启用已启用延迟扩展的cmd实例(/v)并退出cmd实例,并使用上一个命令设置的errorlevel

需要延迟扩展,因为cmd解析器在行/块解析阶段使用变量内的值替换所有%var%读取操作。如果没有延迟扩展(%errorlevel%),将在开始执行命令之前重新执行exit命令返回的值。对于延迟扩展(!errorlevel!),在exit结束后执行commandGoesHere命令时将检索该值。

相关问题