小弟编了个程序 里面需要用shell命令调用CMD.exe中的DOS命令 ,现在的问题是此命令写在了一个循环中,循环总共700多条,一运行同时弹出了700多个CMD.EXE,搞的机器都要挂了。
请问如何进行控制,待一条DOS命令全部执行结束后,在执行下一条啊?代码如下:
FOR I=0 TO 700
SHELL("cmd.exe/c 调用的相关DOS命令",vbhide)
next i
请高人帮忙啊 如何对其进行控制啊?按顺序先执行完第一条 然后关闭 进行第二条运算    小弟不胜感激

解决方案 »

  1.   

    http://www.m5home.com/bbs/thread-1016-1-1.htmlOption Explicit
    '*************************************************************************
    '**模 块 名:ModShellEx
    '**说    明:增强SHELL函数
    '**创 建 人:马大哈
    '**描    述:紫水晶工作室 http://www.m5home.com/
    '**日    期:2007年4月24日
    '**版    本:V1.0
    '*************************************************************************
    Private Declare Function GetProcessVersion Lib "kernel32" (ByVal ProcessId As Long) As Long
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Public Function ShellEx(ByVal FileName As String, Optional ByVal WindowStyle As VbAppWinStyle = vbNormalFocus, Optional ByVal DelayTime As Long = -1) As Long
        '与SHELL函数一样的参数,不过是阻塞执行.(同步)
        'FileName - 目标文件名
        'WindowStyle - 程序运行时窗口的样式
        'DelayTime - 等待的时间,单位为ms
        '备注:
        '       DelayTime设置为-1时表示一直等待,直到目标程序运行结束
        Dim I As Long, J As Long
        
        I = Shell(FileName, WindowStyle)
        ShellEx = I
        Do
            If GetProcessVersion(I) = 0 Then Exit Do            '目标进程退出时跳出
            Sleep 10
            J = J + 1
            DoEvents
            If DelayTime <> -1 And J > DelayTime \ 10 Then Exit Do  '非永远等待+等待时间达到时跳出
        Loop
        
    End Function
      

  2.   

    参考http://blog.csdn.net/szwangdf/archive/2007/01/29/1496640.aspx
      

  3.   

    什么东西cmd可以做到vb还做不到的?
      

  4.   

    我看老马的那个行,泰山的也不错……嘿嘿
    免分Mark
      

  5.   

    看看下面这个要得不:
    Dim retPID As Double, i As Long
    For i = 0 To 700
        Do While retPID = 0
           retPID = Shell("cmd /c dir e:/s/a/l>e:\dir.txt", vbHide)
           If retPID Then Exit Do
        Loop
        retPID = 0
    Next