【问题标题】:Execute Process and Redirect Output执行进程和重定向输出
【发布时间】:2014-03-21 07:24:18
【问题描述】:

我使用 VBScript 运行一个进程。该过程通常需要 5-10 分钟才能完成,如果我独立运行该过程,那么它会在运行时提供间歇性输出。

我想在使用 VBScript 运行进程时实现相同的逻辑。谁能告诉我该怎么做?

Set Process = objSWbemServices.Get("Win32_Process")
result = Process.Create(command, , , intProcessID)
waitTillProcessFinishes objSWbemServices,intProcessID
REM How to get the output when the process has finished or while it is running

【问题讨论】:

    标签: redirect vbscript stdout


    【解决方案1】:

    您无权访问通过 WMI 启动的进程的输出。你可以做的是将输出重定向到一个文件:

    result = Process.Create("cmd /c " & command & " >C:\out.txt", , , intProcessID)
    

    并定期读取文件:

    Set fso = CreateObject("Scripting.FileSystemObject")
    linesRead = 0
    qry = "SELECT * FROM Win32_Process WHERE ProcessID=" & intProcessID
    
    Do While objSWbemServices.ExecQuery(qry).Count > 0
      Set f = fso.OpenTextFile("C:\out.txt")
      Do Until f.AtEndOfStream
        For i = 1 To linesRead : f.SkipLine : Next
        WScript.Echo f.ReadLine
        linesRead = linesRead + 1
      Loop
      f.Close
    
      WScript.Sleep 100
    Loop
    

    以上假设进程在本地主机上运行。如果它在远程主机上运行,​​则需要从 UNC 路径读取文件。

    对于本地进程,Exec 方法将是一种替代方法,因为它可以让您访问进程的 StdOut:

    Set sh = CreateObject("WScript.Shell")
    Set p  = sh.Exec(command)
    
    Do While p.Status = 0
      Do Until p.StdOut.AtEndOfStream
        WScript.Echo p.StdOut.ReadLine
      Loop
      WScript.Sleep 100
    Loop
    
    WScript.Echo p.StdOut.ReadAll
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-06
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      • 2014-07-05
      • 1970-01-01
      • 2012-01-24
      相关资源
      最近更新 更多