我有一个批处理文件,它从命令行获取一些参数并将一些值返回到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中?
答案 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
您可能需要对此进行一些调试。