|
bd123456789
中级用户
积分 360
发帖 216
注册 2007-5-29
状态 离线
|
『楼 主』:
VBS程序如何去传递或获取"批处理的执行结果"
程序如下:
set WshShell = CreateObject("WScript.Shell")
cmd=WshShell.run("CMD /c echo %time%", runhide)
msgbox cmd
为什么显示的结果是0,而不是批处理的执行结果17:02:28呢?
如何去提取批处理的执行结果?
|
|
2008-3-7 18:20 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
2 楼』:
cmd为什么要是P的内容?
你知道run的返回值是什么麽?
你直接msgbox time不是更好麽?
|
|
2008-3-7 20:18 |
|
|
bd123456789
中级用户
积分 360
发帖 216
注册 2007-5-29
状态 离线
|
『第
3 楼』:
呵呵,非也
我上面的程序是举例
在有些情况 ,使用批处理可能比使用脚本在代码上更简洁,或者说更容易,程序中的TIME只不过是举例而已,请不要误解噢!
从你的回答中看来,显示0,看来是顺利执行了运行批处理代码的而已,而不是批处理的执行结果.OK
就是想不通,有什么好的方法能够直接使用脚本语言捕获CMD执行结果????
[ Last edited by bd123456789 on 2008-3-7 at 09:11 PM ]
|
|
2008-3-7 21:09 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
4 楼』:
不过VBS的效率高。
比较容易想到的是2个方法,bat输出,vbs读取。
当参数调用。
|
|
2008-3-7 22:08 |
|
|
fastslz
铂金会员
DOS一根葱
积分 5493
发帖 2315
注册 2006-5-1 来自 上海
状态 离线
|
『第
5 楼』:
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
|
第一高手 第二高手
我的小站
|
|
2008-3-10 15:54 |
|
|
bd123456789
中级用户
积分 360
发帖 216
注册 2007-5-29
状态 离线
|
『第
6 楼』:
ok
执行结果正确!
以后可以拿来作标准组件了,解决了不少问题!
OK OK
不过,因为VBS水平有限,不知道其中的工作原理?
能看得懂的,帮忙解释一下吗?
是不是利用VBS去读取内存呀?或者其它什么的?
|
|
2008-3-11 09:43 |
|
|
zh159
金牌会员
积分 3687
发帖 1467
注册 2005-8-8
状态 离线
|
『第
7 楼』:
如果批处理有输出,可以直接获取:
Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("%comspec% /c dir")
WScript.Echo oExec.StdOut.ReadAll 发现没有隐藏cmd窗口的参数,运行的时候会跳出cmd窗口
|
|
|
2008-3-11 10:43 |
|
|
fastslz
铂金会员
DOS一根葱
积分 5493
发帖 2315
注册 2006-5-1 来自 上海
状态 离线
|
『第
8 楼』:
Quote: | Originally posted by bd123456789 at 2008-3-11 09:43:
执行结果正确!
以后可以拿来作标准组件了,解决了不少问题!
OK OK
不过,因为VBS水平有限,不知道其中的工作原理?
能看得懂的,帮忙解释一下吗?
是不是利用VBS去读取内存呀?或者其它什么的? |
|
这段代码Script56.chm
zh159兄的是简化代码,5楼完整代码还能返回Cmd执行错误提示,试试("%comspec% /c echo xxxx")就知道了
|
第一高手 第二高手
我的小站
|
|
2008-3-11 11:13 |
|
|
bd123456789
中级用户
积分 360
发帖 216
注册 2007-5-29
状态 离线
|
『第
9 楼』:
简单测试了一下
5楼代码中间一大段主要功能是 当CMD程序执行发生错误时,能够将错误原因显示出来...
7楼的方法,太简洁了,OK
|
|
2008-3-11 17:27 |
|