今天遇到一个问题,还是执行外部命令的问题,就是要带上路径
比如说我要执行 当前目录\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




