51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 8794|回复: 14
打印 上一主题 下一主题

[原创] 怎样得到dos命令的返回值?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-5-28 15:45:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Dim oShell
Set oShell = CreateObject ("WSCript.shell")
oShell.run "cmd /K CD C:\ & Dir"
Set oShell = Nothing

这样可以实现操作dos命令,但哪位知道怎么样可以得到dir后结果呢,比如返回一个array型的字符数组。

[ 本帖最后由 yzem99 于 2007-5-28 17:47 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2007-5-28 16:06:13 | 只看该作者
高深,dos我懂一点,但是怎么取返回值没研究过
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2007-5-28 17:00:53 | 只看该作者
echo %errorlevel% 来查看返回值就可以了。需要说明的是,不是每个命令都有返回值的,一般返回值为0代表命令执行成功,大于0一般代表命令执行失败或者出错

批处理的 if命令 可以判断返回值 的 所以功能也很强大
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2007-5-28 17:26:02 | 只看该作者
Public Function ExecCmd(strCmd)

        Dim oShell
        Set oShell = CreateObject ("WSCript.shell")
        oShell.run "cmd /c " + strCmd+ " > CmdTemp.txt"
        Set oShell = Nothing

        wait(1)
        Set fso = CreateObject("Scripting.FileSystemObject")
        Set f = fso.OpenTextFile("CmdTemp.txt",1,false)
        Dim arrText
                Redim arrText(0)
        i = 0
        Do While f.AtEndOfLine <> TRUE
                arrText(i) = f.ReadLine
                i = i + 1
                ReDim Preserve arrText(i)
        Loop
        f.Close

        Call fso.DeleteFile("CmdTemp.txt")

        ExecCmd = arrText
       
End Function
我写了个函数,可以通过存到文件里,然后从文件里读
比如ExecCmd("Dir"),这里只能执行单个命令。
不知道有没更好的方法

[ 本帖最后由 yzem99 于 2007-5-28 18:05 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2007-5-28 23:23:24 | 只看该作者
前2天研究一个测试PC之间的连通性问题,写了一个JAVA程序,通过GUI界面ping另一台机器,若通,就在TextArea中显示OK,否则就显示Unreachable,给你做个参考吧,帮你加上了注释。


  1. import java.io.*;

  2. public class Ping {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 //实际中需要使用窗口实现结果输出
  8.                 boolean passed = false;
  9.                 passed = pingServer("192.168.1.1", 2000);
  10.                 if (passed) {
  11.                         System.out.print("OK");
  12.                 } else {
  13.                         System.out.print("Unreachable");
  14.                 }

  15.         }

  16.         /**      
  17.          *   @param      
  18.          */
  19.         public static boolean pingServer(String server, int timeout) {

  20.                 //准备执行的命令字符串
  21.                 String pingCommand = "ping " + server + " -n 1 -w " + timeout;

  22.                 try {
  23.                         //使用一个独立的进程在运行时环境中执行ping命令
  24.                         Process p = Runtime.getRuntime().exec(pingCommand);
  25.                        
  26.                         //正常情况下,应返回一个Process的实例
  27.                         //若为空,则表示未获得实例,返回false
  28.                         if (p == null) {
  29.                                 return false;
  30.                         }
  31.                        
  32.                         //BufferedReader实例化
  33.                         //从进程p中得到网络中传回的字节流,并将其解码为字符,并将其置入缓冲区
  34.                         BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
  35.                         String line = null;
  36.                        
  37.                         //读取缓冲区中的每一行,若该行不为null就继续循环
  38.                         while ((line = in.readLine()) != null) {
  39.                                
  40.                                 //多个行中,只要有一行符合该条件,就返回True
  41.                                 if (line.startsWith("Reply from")) {
  42.                                         return true;
  43.                                 }
  44.                         }
  45.                         //关闭该流
  46.                         in.close();
  47.                        
  48.                         //若出现异常,就返回false
  49.                 } catch (Exception e) {
  50.                         return false;
  51.                 }
  52.                 //若不符合上面的条件,就返回false
  53.                 return false;
  54.         }

  55. }

复制代码
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2007-5-29 09:51:39 | 只看该作者
谢谢楼上的回复,但我所需要的并不是命令执行后的true or false的结果,我需要执行一条命令在dos窗口显示的结果。
比如dir显示一个目录所有子目录和文件,我所需要的就是这些子目录和文件名。。。
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2007-5-29 12:16:07 | 只看该作者
不是很清楚怎么取Dos命令返回值
但是你可以用写一段VBS脚本,模仿Dir命令,就可以有返回值了
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2007-5-29 12:16:25 | 只看该作者
Dim s
Call ShowFileList("C:\")
Call ShowFolderList("C:\")
MsgBox s
Sub ShowFileList(folderspec)
    Dim fs, f, f1, fc
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(folderspec)
    Set fc = f.Files
    For Each f1 in fc
        s = s & f1.name
        s = s & vbCrLf
    Next
End Sub

Sub ShowFolderList(folderspec)
    Dim fs, f, f1, fc
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(folderspec)
    Set fc = f.SubFolders
    For Each f1 in fc
        s = s & f1.name
        s = s &  vbCrLf
    Next
End Sub
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2007-5-29 12:30:33 | 只看该作者

回复 #11 没有蛀牙 的帖子

我只是用dir举个例子而已,我在工作中碰到的,是用一个java命令在dos中运行,然后得到那些java 服务的运行状态。
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2007-5-29 16:00:41 | 只看该作者
学习。
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2007-5-29 22:54:23 | 只看该作者
原帖由 yzem99 于 2007-5-29 09:51 发表
谢谢楼上的回复,但我所需要的并不是命令执行后的true or false的结果,我需要执行一条命令在dos窗口显示的结果。
比如dir显示一个目录所有子目录和文件,我所需要的就是这些子目录和文件名。。。




我给你发的那个代码就可以,你只要稍微改一点东西,就可以了
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2007-5-30 09:10:54 | 只看该作者
LZ试过,管道输出么(可能是这么叫) 就是DOS命令后面接个>文件名
如: dir c:\>f.txt
dir 命令执行的结果,就保存到f.txt中了,然后你在用文件的方式,在QTP中读取出来,就可以了。
(个人意见,应该可以)
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2007-5-30 09:16:02 | 只看该作者

回复 #15 claude 的帖子

是可以的,但不能连接两个命令,比如cd c:\ & dir > 文件名, 就不能保存了。
再则对单个命令,不知道有没更好的办法。。。
回复 支持 反对

使用道具 举报

该用户从未签到

14#
 楼主| 发表于 2007-5-30 09:17:30 | 只看该作者
原帖由 gotolife 于 2007-5-29 22:54 发表




我给你发的那个代码就可以,你只要稍微改一点东西,就可以了



复 #11 没有蛀牙 的帖子


我只是用dir举个例子而已,我在工作中碰到的,是用一个java命令在dos中运行,然后得到那些java 服务的运行状态。
回复 支持 反对

使用道具 举报

该用户从未签到

15#
发表于 2007-5-31 00:51:42 | 只看该作者
原帖由 yzem99 于 2007-5-30 09:17 发表



复 #11 没有蛀牙 的帖子


我只是用dir举个例子而已,我在工作中碰到的,是用一个java命令在dos中运行,然后得到那些java 服务的运行状态。




一样的
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-19 22:43 , Processed in 0.070375 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表