中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-07 18:57
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » VBS程序如何去传递或获取"批处理的执行结果" 查看 1,151 回复 8
楼 主 VBS程序如何去传递或获取"批处理的执行结果" 发表于 2008-03-07 18:20 ·  中国 浙江 嘉兴 海宁市 电信
中级用户
★★
积分 360
发帖 216
注册 2007-05-29 17:41
19年会员
UID 89677
性别 男
状态 离线
程序如下:

set WshShell = CreateObject("WScript.Shell")

cmd=WshShell.run("CMD /c echo %time%", runhide)

msgbox cmd

为什么显示的结果是0,而不是批处理的执行结果17:02:28呢?

如何去提取批处理的执行结果?
2 发表于 2008-03-07 20:18 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
cmd为什么要是P的内容?
你知道run的返回值是什么麽?

你直接msgbox time不是更好麽?
3 呵呵,非也 发表于 2008-03-07 21:09 ·  中国 浙江 嘉兴 海宁市 电信
中级用户
★★
积分 360
发帖 216
注册 2007-05-29 17:41
19年会员
UID 89677
性别 男
状态 离线
我上面的程序是举例

在有些情况 ,使用批处理可能比使用脚本在代码上更简洁,或者说更容易,程序中的TIME只不过是举例而已,请不要误解噢!

从你的回答中看来,显示0,看来是顺利执行了运行批处理代码的而已,而不是批处理的执行结果.OK

就是想不通,有什么好的方法能够直接使用脚本语言捕获CMD执行结果????

[ Last edited by bd123456789 on 2008-3-7 at 09:11 PM ]
4 发表于 2008-03-07 22:08 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
不过VBS的效率高。

比较容易想到的是2个方法,bat输出,vbs读取。

当参数调用。
5 发表于 2008-03-10 15:54 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
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
第一高手 第二高手

6 ok 发表于 2008-03-11 09:43 ·  中国 浙江 嘉兴 海宁市 电信
中级用户
★★
积分 360
发帖 216
注册 2007-05-29 17:41
19年会员
UID 89677
性别 男
状态 离线
执行结果正确!
以后可以拿来作标准组件了,解决了不少问题!
OK OK

不过,因为VBS水平有限,不知道其中的工作原理?

能看得懂的,帮忙解释一下吗?

是不是利用VBS去读取内存呀?或者其它什么的?
7 发表于 2008-03-11 10:43 ·  中国 广西 玉林 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
如果批处理有输出,可以直接获取:
Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("%comspec% /c dir")
WScript.Echo oExec.StdOut.ReadAll


发现没有隐藏cmd窗口的参数,运行的时候会跳出cmd窗口
8 发表于 2008-03-11 11:13 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
Originally posted by bd123456789 at 2008-3-11 09:43:
执行结果正确!
以后可以拿来作标准组件了,解决了不少问题!
OK OK

不过,因为VBS水平有限,不知道其中的工作原理?

能看得懂的,帮忙解释一下吗?

是不是利用VBS去读取内存呀?或者其它什么的?

这段代码Script56.chm
zh159兄的是简化代码,5楼完整代码还能返回Cmd执行错误提示,试试("%comspec% /c echo xxxx")就知道了
第一高手 第二高手

9 发表于 2008-03-11 17:27 ·  中国 浙江 嘉兴 海宁市 电信
中级用户
★★
积分 360
发帖 216
注册 2007-05-29 17:41
19年会员
UID 89677
性别 男
状态 离线
简单测试了一下

5楼代码中间一大段主要功能是 当CMD程序执行发生错误时,能够将错误原因显示出来...

7楼的方法,太简洁了,OK
论坛跳转: