我們經常會遇到這樣的問題,例如要按次序執行幾個程式,不是同時執行,也不是依次開啟,而是當第乙個程式執行完畢後再執行第二個,接著是第三個,等等等等。在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)的結果是半形的雙引號。貼主對於問題的解決表示滿意。
這僅僅是批處理檔案在程式設計應用中的乙個例子。在程式設計中靈活的使用批處理檔案,可以大大的減輕程式設計的負擔和提高程式的效率。
原 程式設計中靈活使用批處理檔案
我們經常會遇到這樣的問題,例如要按次序執行幾個程式,不是同時執行,也不是依次開啟,而是當第乙個程式執行完畢後再執行第二個,接著是第三個,等等等等。在csdn社群裡,使用者ww111222 就遇到了這樣的乙個問題 如何按順序執行4個exe程式 一種解決的方案是使用特定的api啟動乙個程式,監視它,不停...
使用批處理檔案
字尾是bat的檔案就是批處理檔案,是一種文字檔案。簡單的說,它的作用就是自動的連續執行多條命令,批處理檔案的內容就是一條一條的命令。那它有什麼用呢?比如,在啟痺ps軟體時,每次都必須執行 c cd wps c wps spdos c wps py c wps wbx c wps wps 如果每次用w...
批處理檔案
dos下的可執行檔案有三種,分別是exe,com和bat。其中,exe和com檔案都是二進位制形式的,只有bat檔案是文字形式的,可以直接閱讀。因 此,bat檔案和以上二進位制可執行檔案相比,內容要簡單的多。這些檔案內包含著dos命令的集合,通常叫作批處理檔案。批處理檔案的組成雖然比較簡單,但 其用...