CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

今天遇到一个问题,还是执行外部命令的问题,就是要带上路径

楼主ww111222(ww111222)2005-01-12 13:28:29 在 VB / 基础类 提问

 
      比如说我要执行   当前目录\back\back.bat   文件  
   
   
      我用     Shell   "App.Path\data\back.bat   "  
                  Shell   App.Path   +   "\data\back.bat   "  
   
   
      都不能正常执行  
   
   
        为什么? 问题点数:20、回复次数:8Top

1 楼sworddx(.:RNPA:. hillin)回复于 2005-01-12 13:30:09 得分 5

用shellexecute   api:  
  Private   Declare   Function   ShellExecute   Lib   "shell32.dll"   Alias   "ShellExecuteA"   (ByVal   hwnd   As   Long,   ByVal   lpOperation   As   String,   ByVal   lpFile   As   String,   ByVal   lpParameters   As   String,   ByVal   lpDirectory   As   String,   ByVal   nShowCmd   As   Long)   As   Long  
   
  private   sub   Command1_Click()  
  shellexecute   0,"open",app.path   &   "\data\back.bat",vbnullstring,vbnullstring,vbnull  
  end   subTop

2 楼tztz520(午夜逛街)回复于 2005-01-12 13:31:47 得分 0

Shell   App.Path   +   "\data\back.bat"'后面没空格的.  
   
  如果不行你就检查这个路径是否正确.或用绝对路径测试一下.Top

3 楼sworddx(.:RNPA:. hillin)回复于 2005-01-12 13:31:59 得分 0

shell函数只能执行exe或者com(或者有其它的但是我不知道)等格式的程序,如果是bat这样的批处理文件,不能直接使用shell调用,而应该使用shellexecute   api。这个api通过判定文件的类型来调用相应的程序打开指定的文件。Top

4 楼ww111222(ww111222)回复于 2005-01-12 13:33:20 得分 0

 
   
      高手就是高手,  
   
  Top

5 楼ww111222(ww111222)回复于 2005-01-12 13:49:07 得分 0

 
   
          我   又   做了一个测试,   如果不在   data   子目录下,     而是在当前目前下,back.bat   就能被执行  
   
  比如说    
   
   
        原来   data目录下有两个文件   back.bat   1.txt  
   
  back.bat   的内容:  
   
  copy   %1   %2  
  copy   %1   aa  
  del   %1  
  ren   %2   bb  
   
  我用   :  
   
  Shell   "back.bat   1.txt   2.com"  
   
  就能正确执行  
   
        而放到   data目录时  
   
  用    
  Shell   app.path   +   "\data\back.bat   1.txt   2.com"  
   
  就不行Top

6 楼sworddx(.:RNPA:. hillin)回复于 2005-01-12 16:54:42 得分 0

那是我弄错了=),原来shell可以执行bat啊。  
   
  你试试看这样行不行:  
  sCmd=Chr$(34)   &   app.path   &   "\data\back.bat"   &   Chr$(34)   &   "   1.txt   2.com"  
  shell   sCmd  
   
  Chr$(34)得到的结果是半角双引号,这样可以避免app.path中含有的空格带来的混乱。Top

7 楼sworddx(.:RNPA:. hillin)回复于 2005-01-12 16:57:30 得分 0

另外,app.path得到的值末尾可能有“\”,也可能没有。你写一个函数AppPath:  
  private   function   AppPath()   as   string  
      apppath=iif(right(app.path,1)="\",left(app.path,len(app.path)-1),app.path)  
  end   function  
  然后在调用时把程序其它地方的app.path替换成apppath,这样可以避免(某些时候可能出现的)两个“\”带来的混乱。Top

8 楼faguoshen(faguoshen)回复于 2005-01-28 17:26:44 得分 15

记得文件路径如果是长格式路径会出错的!!(应用双引号括上)  
   
  看看我作的吧,参考参考   -----------要多给分啊(再给30分!)  
   
   
  Rar_path   =   GetAssociatedExecutable("rar")  
  Source   =   """"   &   App.Path   &   "\try.mdb""   """   &   App.Path   &   "\aa.txt"""  
  Target   =   """"   &   App.Path   &   "\try.rar"""  
  FileString   =   Rarexe   &   "   A   "   &   Target   &   "   "   &   Source  
  Shell(FileString,   vbHide)  
   
  Public   Function   GetAssociatedExecutable(ByVal   Extension   As   String)   As   String  
          Dim   Path   As   String  
          Dim   FileName   As   String  
          Dim   nRet   As   Long  
          Const   MAX_PATH   As   Long   =   260  
           
          '注释:Create   a   tempfile  
          Path   =   String$(MAX_PATH,   0)  
           
          If   GetTempPath(MAX_PATH,   Path)   Then  
                  FileName   =   String$(MAX_PATH,   0)  
                  If   GetTempFileName(Path,   "~",   0,   FileName)   Then  
                          FileName   =   Left$(FileName,   InStr(FileName,   vbNullChar)   -   1)  
                          '注释:Rename   it   to   use   supplied   extension  
                          Name   FileName   As   Left$(FileName,   InStr(FileName,   "."))   &   Extension  
                          FileName   =   Left$(FileName,   InStr(FileName,   "."))   &   Extension  
                          '注释:Get   name   of   associated   EXE  
                          Path   =   String$(MAX_PATH,   0)  
                          Call   FindExecutable(FileName,   vbNullString,   Path)  
                          GetAssociatedExecutable   =   Left$(Path,   InStr(Path,   vbNullChar)   -   1)  
                          '注释:   Clean   up  
                          Kill   FileName  
                  End   If  
          End   If  
   
  End   Function  
  Top

相关问题

  • Java 怎么执行操作系统的命令?没人遇到过吗
  • 高高手请进:ntsd命令如何忽略执行时遇到的错误?
  • java程序在linux运行,要用Runtime.exec()执行外部命令,可外部命令中关于文件操作的路径都很长,如何使用相对路径.在线等待
  • 疑问? 当执行一网络命令(比如:Ping www.263.net)的时候,如果当时机器上有多个 modem 的时候,它如何选择路径呢?
  • 怎么执行dos命令。
  • 不能执行SQL命令?
  • 执行dos命令问题?
  • 执行dos命令问题
  • java执行cmd命令
  • OracleOraHome92TNSListener的可执行路径丢失

关键词

  • 执行
  • 文件
  • shell
  • api
  • 路径
  • app
  • bat
  • path
  • apppath
  • back

得分解答快速导航

  • 帖主:ww111222
  • sworddx
  • faguoshen

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo