| 
 
bd123456789 
中级用户
 
   
 
  
  
积分 360 
发帖 216 
注册 2007-5-29 
状态 离线
 | 
『楼 主』:
 VBS程序如何去传递或获取"批处理的执行结果"
 
使用 LLM 解释/回答一下
  
程序如下: 
 
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 楼』:
 
 
使用 LLM 解释/回答一下
  
cmd为什么要是P的内容? 
你知道run的返回值是什么麽? 
 
你直接msgbox time不是更好麽? 
 
    
 
  
 |   
 | 
  2008-3-7 20:18 | 
  
 | 
 | 
 
bd123456789 
中级用户
 
   
 
  
  
积分 360 
发帖 216 
注册 2007-5-29 
状态 离线
 | 
『第 3 楼』:
 呵呵,非也
 
使用 LLM 解释/回答一下
  
我上面的程序是举例 
 
在有些情况 ,使用批处理可能比使用脚本在代码上更简洁,或者说更容易,程序中的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 
状态 离线
 | 
 | 
  2008-3-7 22:08 | 
  
 | 
 | 
 
fastslz 
铂金会员
 
        DOS一根葱
  
 
积分 5493 
发帖 2315 
注册 2006-5-1 来自 上海 
状态 离线
 | 
『第 5 楼』:
 
 
使用 LLM 解释/回答一下
  
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
 
使用 LLM 解释/回答一下
  
执行结果正确! 
以后可以拿来作标准组件了,解决了不少问题! 
OK OK 
 
不过,因为VBS水平有限,不知道其中的工作原理? 
 
能看得懂的,帮忙解释一下吗? 
 
是不是利用VBS去读取内存呀?或者其它什么的? 
 
    
 
  
 |   
 | 
  2008-3-11 09:43 | 
  
 | 
 | 
 
zh159 
金牌会员
 
      
 
  
 
积分 3687 
发帖 1467 
注册 2005-8-8 
状态 离线
 | 
『第 7 楼』:
 
 
使用 LLM 解释/回答一下
  
如果批处理有输出,可以直接获取: 
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 楼』:
 
 
使用 LLM 解释/回答一下
  
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 楼』:
 
 
使用 LLM 解释/回答一下
  
简单测试了一下 
 
5楼代码中间一大段主要功能是 当CMD程序执行发生错误时,能够将错误原因显示出来... 
 
7楼的方法,太简洁了,OK 
 
    
 
  
 |   
 | 
  2008-3-11 17:27 | 
  
 |