Windows 执行外部程序并读取输出

Windows 执行外部程序并读取输出,windows,vbscript,cmd,output,io-redirection,Windows,Vbscript,Cmd,Output,Io Redirection,我尝试编写一个VBScript,它将执行外部程序并从程序执行中读取输出。我使用以下代码: Option Explicit Dim Title,ws,Command,Exec,FileExe,param1 FileExe = "ping.exe" param1 = "127.0.0.1 " MeHappy FileExe,param1 Function MeHappy(FileExe, param1) Dim Title, ws, Command, Exec Title = "

我尝试编写一个VBScript,它将执行外部程序并从程序执行中读取输出。我使用以下代码:

Option Explicit
Dim Title,ws,Command,Exec,FileExe,param1
FileExe = "ping.exe"
param1 = "127.0.0.1 "

MeHappy FileExe,param1

Function MeHappy(FileExe, param1)
    Dim Title, ws, Command, Exec
    Title = "Test "
    Set ws = CreateObject("wscript.Shell")
    command = "cmd /c Start "& FileExe &" "& param1 &">test.txt "
    Msgbox command, 64, Title
    Exec = ws.run(command, 0, True) 
End Function
我看到cmd被执行并返回输出,但重定向文件总是0kb且为空

我还使用以下代码重定向了输出:

Set WshShell = WScript.CreateObject("WScript.Shell")
Return = WshShell.Run("cmd /c ping.exe 127.0.0.1 > test.txt", 1, True)
并且文件正常,它包含来自
ping.exe
的输出

但当我尝试启动其他外部程序时,我遇到了另一个问题。我自己调用的外部程序正在调用另一个exe程序,我无法读取整个输出

例如,如果我有
test.exe
,而
test.exe
本身正在调用另一个exe文件(例如
test1.exe
),在这种情况下,我不会收到整个输出。我只收到来自
test.exe
的输出,因为可能
test.exe
仅调用
test1.exe
,它结束时不等待
test1.exe
或任何东西

这我可以从任务管理器中检查。我看到,
test.exe
执行完毕,生成了带输出的文件,但
test1.exe
仍在运行,完成后文件中没有输出,但如果我定期(无脚本)从cmd-only示例
test.exe
运行,我可以看到test和test1的整个输出

对于第一个脚本,如果我执行
test.exe
,我会看到整个输出,但重定向文件总是空的,对于第二个脚本,我不会只接收整个输出。外部程序是我无法控制的

有任何关于如何管理的建议吗?

如有疑问,请阅读

开始
[…]
启动单独的命令提示符窗口以运行指定的程序或命令

无法在当前窗口中重定向其他窗口中的输出

更改此项:

command = "cmd /c Start "& FileExe &" "& param1 &">test.txt "
为此:

command = "cmd /c "& FileExe &" "& param1 &">test.txt"
问题就会消失

另一个选项是以整个命令(包括重定向)作为命令字符串(嵌套)双引号启动另一个CMD实例:

command = "cmd /c start cmd /c """& FileExe &" "& param1 &">test.txt"""
'                       ^^^^^^^^^                                   ^^
至于捕获孙子进程的输出:这在很大程度上取决于进程是如何启动的以及它的输出是如何实际生成的。您可以尝试绕过启动器,直接启动孙子进程