我想顺序执行4个DOS程序,请大家帮帮我
没有找到相关的贴子,只好请大家帮忙了
问题点数:0、回复次数:23Top
1 楼sworddx(.:RNPA:. hillin)回复于 2005-01-12 13:20:44 得分 0
假设4个DOS程序分别是1.exe,2.exe,3.exe,4.exe,都放在c:\下:
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 form_load()
dim scmd As string
scmd="C:" & vbcrlf & "cd \" & vbcrlf & "1.exe" & vbcrlf & "2.exe" & vbcrlf & "3.exe" & vbcrlf & "4.exe"
open "c:\1.bat" for output as #1
print #1,scmd
close #1
shellexecute 0,"open","c:\1.bat",vbnullstring,vbnullstring,vbnull
end subTop
2 楼laviewpbt(人一定要靠自己)回复于 2005-01-12 13:24:10 得分 0
请问如何在vb中用同步方式调用外部dos命令
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=85141Top
3 楼ww111222(ww111222)回复于 2005-01-12 13:24:54 得分 0
谢谢这位大哥了, 这4个DOS程序都带有不同的参数
而且我要在VB中控制 这些参数
Top
4 楼sworddx(.:RNPA:. hillin)回复于 2005-01-12 13:27:56 得分 0
那简单,改一下就是了
假设4个DOS程序分别是1.exe,2.exe,3.exe,4.exe,都放在c:\下;参数分别是param1,param2,param3,param4:
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 form_load()
dim scmd As string
scmd="C:" & vbcrlf & "cd \" & vbcrlf & "1.exe /" & param1 & vbcrlf & "2.exe /" & param2 & vbcrlf & "3.exe /" & param3 & vbcrlf & "4.exe /" & param4
open "c:\1.bat" for output as #1
print #1,scmd
close #1
shellexecute 0,"open","c:\1.bat",vbnullstring,vbnullstring,vbnull
end sub
Top
5 楼ww111222(ww111222)回复于 2005-01-12 13:31:21 得分 0
谢谢,我试试啦Top
6 楼shiyunlong(君子爱财-取之用刀)回复于 2005-01-12 13:35:13 得分 0
markTop
7 楼douhapy(双喜)回复于 2005-01-12 13:42:17 得分 0
最好使用这两个函数
Public Declare Function OpenProcess Lib "kernel32" Alias "OpenProcess" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" Alias "CloseHandle" (ByVal hObject As Long) As Long
Top
8 楼terry6394(小猪,向前跑!)回复于 2005-01-12 16:46:43 得分 0
有创意,用批处理...
sworddx 的方法很好啊!Top
9 楼terry6394(小猪,向前跑!)回复于 2005-01-12 16:52:56 得分 0
狗尾续貂一下:
如果你想运行之后还留下命令行窗口你可以这样!
scmd="C:" & vbcrlf & "cd \" & vbcrlf & "1.exe /" & param1 & vbcrlf & "2.exe /" & param2 & vbcrlf & "3.exe /" & param3 & vbcrlf & "4.exe /" & param4 & vbcrlf & "%SystemRoot%\system32\cmd.exe"Top
10 楼sworddx(.:RNPA:. hillin)回复于 2005-01-12 17:10:33 得分 0
to douhapy(双喜)
简单的问题没必要复杂化吧~Top
11 楼ww111222(ww111222)回复于 2005-01-12 17:48:50 得分 0
谢谢 SWORDDX,
现在产生了一个 小问题了, 我想在运行生成的1.bat后 删除这个文件
用了kill 1.bat
结果 是还没来得及 运行 1.bat就被删除了
Top
12 楼laviewpbt(人一定要靠自己)回复于 2005-01-12 17:51:19 得分 0
Private Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
Top
13 楼kmzs(.:RNPA:.山水岿濛)回复于 2005-01-12 17:52:36 得分 0
必须用createprocess等
等到运行之后再删除了Top
14 楼ww111222(ww111222)回复于 2005-01-12 18:34:50 得分 0
两位老兄,能不能说明白点?
我是刚学VB ,不懂呀Top
15 楼rainstormmaster(暴风雨 v2.0)回复于 2005-01-12 18:49:40 得分 0
呵呵,答案在这里:
http://www.zealsoftstudio.com/articles/qa9805.htmlTop
16 楼VBDN( PowerBASIC.CN )回复于 2005-01-12 18:54:58 得分 0
呵呵,这个东西真有用!
以前兄弟做了个自动导出ORACLE数据的工具,先执行EXP命令导出,然后用WINRAR压缩,最后拷贝压缩文档到某一网络驱动器上。我发愁顺序发生混乱一直没有好的解决办法,每天都得点3下鼠标。看来BAT是顺序执行的,可以把三个命令放到BAT里顺序执行啊。再加个Timer,每天5:30下班后自动备份,爽死了!Top
17 楼sworddx(.:RNPA:. hillin)回复于 2005-01-12 19:26:21 得分 0
要删除,还是简单事:)
代码改成这样:
scmd="C:" & vbcrlf & "cd \" & vbcrlf & "1.exe /" & param1 & vbcrlf & "2.exe /" & param2 & vbcrlf & "3.exe /" & param3 & vbcrlf & "4.exe /" & param4 & vbcrlf & "%SystemRoot%\system32\cmd.exe /c " & chr$(34) & "del c:\1.bat" & chr(34)
这样在执行到最后一行后会重新调用cmd.exe,并且通过附带/C参数执行命令del c:\1.bat,这样就全部由这个命令行帮你代劳了。Top
18 楼sworddx(.:RNPA:. hillin)回复于 2005-01-12 19:28:20 得分 0
打开命令提示符窗口并执行命令 cmd /?可以看到帮助,你会发现/c参数可以用来执行某个命令并且在完毕后自动关闭;如果参数改为/k则是不关闭,可以灵活调用。Top
19 楼sworddx(.:RNPA:. hillin)回复于 2005-01-12 19:31:05 得分 0
to laviewpbt(人一定要靠自己)
DeleteFile api和kill用起来效果是一样的,因为VB不会管你的BAT是否运行完毕,执行了shell或者shellexecute 语句之后直接往下跑,所以仍然会在BAT执行完之前删掉那个文件。
Top
20 楼laviewpbt(人一定要靠自己)回复于 2005-01-12 19:57:05 得分 0
谢谢楼上的大哥指点。。Top
21 楼douhapy(双喜)回复于 2005-01-13 09:33:03 得分 0
不错,重新学习了Dos时代的知识。
好多都忘记了,谢谢!Top
22 楼ww111222(ww111222)回复于 2005-01-14 13:28:40 得分 0
谢谢各位大哥了
Top
23 楼sworddx(.:RNPA:. hillin)回复于 2005-01-14 13:51:57 得分 0
不用谢,给分就是了~^_^Top



