在dos下输入 D:\svmscale.exe email.txt>email.scale
是把email.txt处理以后生成一个email.scale的文件,运行成功没有问题,但是在vb用shell调用的时候用
shell("D:\svmscale.exe email.txt>email.scale")
一样的命令为什么就不成功?怀疑是因为“>”的问题,怎么解决?请高手指点迷津!谢谢

解决方案 »

  1.   

    dos 下面使用 “>” 会调用command/Cmd 的内部方法,但使用shell调用你的程序,它不会和cmd.exe 有联系,只是纯粹使用svmscale.exe ,就好比你直接运行svmscale.exe 一样,在dos下运行 类似于 cmd /c svmscale.exe D:\svmscale.exe email.txt>email.scale
    所以,楼主可以将你的程序放在一个bat文件里面,然后shell那个bat就好了,或者直接shell("cmd /c D:\svmscale.exe email.txt>email.scale")
      

  2.   

    用了shell("cmd /c D:\svmscale.exe email.txt>email.scale")
    这种方法,可是还不行啊,还是没有反应,请问怎么样把svmscale.exe和email放到bat文件里?
    谢谢
      

  3.   

    shell("cmd /c D:\svmscale.exe email.txt>email.scale")
    应该可以
    在dos下运行的时候行吗?
      

  4.   

    请问怎么样把svmscale.exe和email放到bat文件里?
    ==================================
    不是这个意思的新建一个txt文件,在里面写上: D:\svmscale.exe email.txt>email.scale
    关闭并保存文件,然后把这个文件的后缀名改为.bat 在vb程序里写:
    shell "bat文件的路径\XXX.bat"
      

  5.   

    用shell的时候,把路径都写完整:
        Shell ("cmd /c D:\svmscale.exe D:\email.txt>D:\email.scale")
      

  6.   

    用了shell("cmd /c D:\svmscale.exe email.txt>email.scale")
    这种方法,可是还不行啊,还是没有反应,请问怎么样把svmscale.exe和email放到bat文件里?
    谢谢=========================回复:
    Shell语句的使用格式如下:
    Shell(PathName,[WindowStyle As VbAppWinStyle=vbMinimizedFocus]) As DoublePathName就是你所调用的DOS程序的路径全称;
    WindowStyle As VbAppWinStyle就是你希望选用哪一种打开DOS程序时的窗体样式,比如最大化,最小化及一般模式(通常情况是一般模式,即:vbNormalFocus)。对SHELL语句的扩充:
    问题说明:
    有时候使用此语句往往会出现一些问题。尤其是对于重定向操作!对于重定向所产生的文件,往往会由我们进行利用,比如让它(重定向操作)产生的文件内容显示在某个文本框(TextBox)中,这时就极有可能会出现当对SHELL语句调用时尚未执行完该语句时就直接执行SHELL语句的下面的代码。为了解决此问题,请按以下方法解决:'先申明如下API
    Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
    Private Const SYNCHRONIZE = &H100000
    Private Const INFINITE = &HFFFFFFFF
    '调用如下
    Dim pId As Long, pHnd As Long
    pId = Shell(要执行的应用程序)
    pHnd = OpenProcess(SYNCHRONIZE, 0, pId)
    If pHnd <> 0 Then
       Call WaitForSingleObject(pHnd, INFINITE)
       Call CloseHandle(pHnd)
       '执行你读取文件到TextBox的操作
       ..................
    else
       msgbox "调用失败"
    End If其中WaitForSingleObject的作用就是用来等待Shell执行完后再执行下面操作!希望楼主能够受到大的启发。
    问题说明到此结束!
      

  7.   

    再次补充:
    但是在vb用shell调用的时候用
    shell("D:\svmscale.exe email.txt>email.scale")
    一样的命令为什么就不成功?怀疑是因为“>”的问题,怎么解决?=================回复如下:这不可能是">"的问题!这很有可能是你的路径问题。因为当你的主程序启动时就是在你的主程序所在的路径的位置。如果要解决路径问题的话,你可以去网上查一下关于使用SetCurrentDirectory(调用API函数)的方法,用GOOGLE或百度直接打入SetCurrentDirectory
    就可查到!
      

  8.   

    paullbm没明白我要问什么啊,不过还是辛苦了。谢谢前几位,非常感谢,问题已经搞定了!
      

  9.   

    小弟的shell 起bat文件同样出错,查资料到此地.严重感谢  paullbm(莫取网名) !多谢 WaitForSingleObject  good!!!