Board logo

标题: VBS程序如何去传递或获取"批处理的执行结果" [打印本页]

作者: bd123456789     时间: 2008-3-7 18:20    标题: VBS程序如何去传递或获取"批处理的执行结果"
程序如下: set WshShell = CreateObject("WScript.Shell") cmd=WshShell.run("CMD /c echo %time%", runhide) msgbox cmd 为什么显示的结果是0,而不是批处理的执行结果17:02:28呢? 如何去提取批处理的执行结果?

作者: slore     时间: 2008-3-7 20:18
cmd为什么要是P的内容? 你知道run的返回值是什么麽? 你直接msgbox time不是更好麽?

作者: bd123456789     时间: 2008-3-7 21:09    标题: 呵呵,非也
我上面的程序是举例 在有些情况 ,使用批处理可能比使用脚本在代码上更简洁,或者说更容易,程序中的TIME只不过是举例而已,请不要误解噢! 从你的回答中看来,显示0,看来是顺利执行了运行批处理代码的而已,而不是批处理的执行结果.OK 就是想不通,有什么好的方法能够直接使用脚本语言捕获CMD执行结果???? [ Last edited by bd123456789 on 2008-3-7 at 09:11 PM ]

作者: slore     时间: 2008-3-7 22:08
不过VBS的效率高。 比较容易想到的是2个方法,bat输出,vbs读取。 当参数调用。

作者: fastslz     时间: 2008-3-10 15:54
Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")
Set oExec    = WshShell.Exec("%comspec% /c echo %time%")

Function ReadAllFromAny(oExec)

     If Not oExec.StdOut.AtEndOfStream Then
          ReadAllFromAny = oExec.StdOut.ReadAll
          Exit Function
     End If

     If Not oExec.StdErr.AtEndOfStream Then
          ReadAllFromAny = oExec.StdErr.ReadAll
          Exit Function
     End If
     
     ReadAllFromAny = -1
End Function

Dim allInput, tryCount

allInput = ""
tryCount = 0

Do While True

     Dim input
     input = ReadAllFromAny(oExec)

     If -1 = input Then
          If tryCount > 10 And oExec.Status = 1 Then
               Exit Do
          End If
          tryCount = tryCount + 1
          WScript.Sleep 100
     Else
          allInput = allInput & input
          tryCount = 0
     End If
Loop

If oExec.ExitCode <> 0 Then
     WScript.Echo "Warning: Non-zero exit code"
End If

WScript.Echo allInput

作者: bd123456789     时间: 2008-3-11 09:43    标题: ok
执行结果正确! 以后可以拿来作标准组件了,解决了不少问题! OK OK 不过,因为VBS水平有限,不知道其中的工作原理? 能看得懂的,帮忙解释一下吗? 是不是利用VBS去读取内存呀?或者其它什么的?

作者: zh159     时间: 2008-3-11 10:43
如果批处理有输出,可以直接获取:
Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")
Set oExec    = WshShell.Exec("%comspec% /c dir")
WScript.Echo oExec.StdOut.ReadAll
发现没有隐藏cmd窗口的参数,运行的时候会跳出cmd窗口

作者: fastslz     时间: 2008-3-11 11:13
Originally posted by bd123456789 at 2008-3-11 09:43: 执行结果正确! 以后可以拿来作标准组件了,解决了不少问题! OK OK 不过,因为VBS水平有限,不知道其中的工作原理? 能看得懂的,帮忙解释一下吗? 是不是利用VBS去读取内存呀?或者其它什么的?
这段代码Script56.chm zh159兄的是简化代码,5楼完整代码还能返回Cmd执行错误提示,试试("%comspec% /c echo xxxx")就知道了

作者: bd123456789     时间: 2008-3-11 17:27
简单测试了一下 5楼代码中间一大段主要功能是 当CMD程序执行发生错误时,能够将错误原因显示出来... 7楼的方法,太简洁了,OK