分享
 
 
 

编程中灵活使用批处理文件

王朝c#·作者佚名  2006-12-17
窄屏简体版  字體: |||超大  

我们经常会遇到这样的问题,例如要按次序执行几个程序,不是同时执行,也不是依次打开,而是当第一个程序执行完毕后再执行第二个,接着是第三个,等等等等。在CSDN社区里,用户ww111222 就遇到了这样的一个问题:如何按顺序执行4个EXE程序。

一种解决的方案是使用特定的API启动一个程序,监视它,不停的监视它,直到了解到它已经关闭了,再执行第二个。这种方法确实可行:如果你见过某些安装程序的话,你会发现它们会在安装过程中执行一个程序,等待它执行完毕再继续安装进程,但显然这种方法比较麻烦。

同时,如果你还记得DOS时代有个批处理的概念的话(实际上,这个概念现在依然存在),你也许会和我一样想到用批处理解决这个问题。在这个帖子中,我是这么回答的:

假设4个DOS程序分别是1.exe,2.exe,3.exe,4.exe,都放在c:\下:

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 Sub

程序的逻辑很简单,编写一个bat文件,然后保存到c:\下,接着使用ShellExecute API(如果不了解的话,请参考MSDN)执行它。后来我了解到,直接使用shell语句也可以达到相同的效果(执行bat文件),而且来得更简单。然后贴主提出,各个程序分别有它们的参数。我把程序修改了一下:

假设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

接下来用户terry6394“狗尾续貂”了一下:如果你想运行之后还留下命令行窗口你可以这样:

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"

这个的思路是在批处理执行结束前再打开一个命令行窗口,但是我怀疑它的可行性。举个例子,打开命令行窗口,输入cmd,你得到的不是两个命令行窗口,而是在原窗口里cmd再执行了一遍。所以我认为这个窗口还是会关闭,但是我没有真正的试过。

贴主下面提出的问题是,他需要在批处理结束后删除批处理文件,但是如果把 kill "c:\1.bat" 直接放到 shellexecute语句后面,就会导致批处理文件还没有执行完就被删除了。我提出的建议是,修改如下一行为:

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)

其中chr$(34)的结果是半角的双引号。贴主对于问题的解决表示满意。

这仅仅是批处理文件在编程应用中的一个例子。在编程中灵活的使用批处理文件,可以大大的减轻编程的负担和提高程序的效率。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有