VBScript脚本作为静默批处理文件的包装器

时间:2017-07-02 08:59:45

标签: windows batch-file vbscript

我有一个批处理文件,它从命令行获取一些参数并将一些值返回到STDOUT。

我希望批处理文件“无声”(这样控制台不显示),并且发现可能是使用vbs脚本的唯一可能性。

我使用this thread来实现转发到VBS中批处理文件的参数。

然后,我使用以下命令调用我包装的批处理文件:

CreateObject("WScript.Shell").Run batchFilePath & " " & Trim(arglist), 0, False

事实证明我的批处理文件确实运行了,但它的STDOUT在某处丢弃了,并且没有回到调用VBS脚本的人那里。即批处理文件的STDOUT不会重定向到VBS脚本的STDOUT。

如何将批处理文件的STDOUT重定向到VBS脚本STDOUT,这样如果我从某个shell启动VBS脚本,批处理文件的输出也会打印到shell中?

2 个答案:

答案 0 :(得分:1)

使用Exec代替Run,如下所示:

set objShell = CreateObject( "WScript.Shell" )
cmd = "echo Hello World!"
' Run the process
set objRes = objShell.Exec( "cmd /c """ & cmd & """" )
' Wait for the child process to finish
Do While objRes.Status = 0
     WScript.Sleep 100
Loop
' Show whatever it printed to its standard output
Wscript.Echo "The output was:" & vbNewLine & objRes.StdOut.ReadAll()

答案 1 :(得分:0)

试试这个......

Intreturn = WshShell.Run("cmd /c " & path& " " & args & ">c:\batchoutput.txt", 0, true) 
Set fso = CreateObject("Scripting.FileSystemObject") 
Set objfile = fso.OpenTextFile("c:\batchoutput.txt", 1)
text = objfile.ReadAll 
Objfile.Close

或试试这个......

Set WshShell = WScript.CreateObject("WScript.Shell") 

Set objexc = WshShell.Exec("cmd /c " & command and args) 'replace command and args with proper variables
strOutputText = ""
While Not objexc.StdOut.AtEndOfStream
     strOutputText = strOutputText & objexc.StdOut.ReadLine()
Loop

Msgbox strOutputText

您可能需要对此进行一些调试。