Java是種跨平臺的語(yǔ)言,我們經(jīng)常碰到需要通過(guò)Java調用windows下某些程序。有些第三方廠(chǎng)商如(ANT),也提供了調用windows下可執行程序的方法,但我們往往需要調用一些批處理命令。而Java卻不提供。這里,我采用一種變相的調用方法,使得Java能調用批處理命令。
前期準備
Quick Batch File (De)Compiler
將任何BAT、CMD批處理腳本編譯為EXE文件。
1、運行exe 文件
Java JDK里已經(jīng)提供了調用的方法,不在累贅,代碼如下。
try {
String command = "notepad";
Process child =
Runtime.getRuntime().exec(command);
} catch (IOException e)
{
}
2、運行 bat(批處理) 文件
Java對批處理文件還不支持。剛開(kāi)始一直在研究Java如何調用批處理文件,始終找不到解決方法。后來(lái)只好繞過(guò)批處理,考慮如何將批處理轉換為exe可執行文件。然后再通過(guò)Java調用可執行文件。
在Google上搜索一下,找到Quick Batch File (De)Compiler,可以將任何BAT、CMD批處理腳本編譯為EXE文件。使用了一下,果然可以。
Quick Batch File (De)Compiler使用非常簡(jiǎn)單:
Quickbfc 文件名.bat 文件名.exe(將批處理命令編譯為可執行文件)
quickbfd 文件名.exe 文件名.bat(將可執行文件反編譯為批處理命令)
然后,我們再按第一種方法通過(guò)Java 調用,即可。
BeanSoft 的實(shí)踐備注:
因為我要實(shí)現調用其他目錄里面的 BAT 文件, 具體說(shuō)就是 Tomcat 的 startup.bat 文件, 目前可以證明的是如果程序啟動(dòng)目錄位于 Tomcat 的 bin 目錄下, 調用批處理文件沒(méi)有問(wèn)題, 而如果不在那個(gè)目錄來(lái)調用 startup.bat, 那么就算使用 Quick Batch File (De)Compiler 也不能正常運行 BAT, 原因就是當前路徑不對. OK, 問(wèn)題集中在如何設置當前路徑下了.
我們看看批處理環(huán)境的 start 的用法:
start /?
啟動(dòng)另一個(gè)窗口運行指定的程序或命令。
START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [command/program]
[parameters]
"title" 在窗口標題欄中顯示的標題。
path 起始目錄
B 在不創(chuàng )建新窗口的情況下開(kāi)始應用程序。 除非
啟動(dòng) ^C 處理,否則該應用程序會(huì )忽略 ^C 處理;
^Break 是唯一可以中斷該應用程序的方式
I 新環(huán)境是傳遞給 cmd.exe 的原始環(huán)境,
而不是當前環(huán)境
MIN 開(kāi)始時(shí)窗口最小化
MAX 開(kāi)始時(shí)窗口最大化
SEPARATE 在分開(kāi)的空間內開(kāi)始 16 位 Windows 程序
SHARED 在分共享的空間內開(kāi)始 16 位 Windows 程序
LOW 在 IDLE 優(yōu)先級類(lèi)別開(kāi)始應用程序
NORMAL 在 NORMAL 優(yōu)先級類(lèi)別開(kāi)始應用程序
HIGH 在 HIGH 優(yōu)先級類(lèi)別開(kāi)始應用程序
REALTIME 在 REALTIME 優(yōu)先級類(lèi)別開(kāi)始應用程序
ABOVENORMAL 在 ABOVENORMAL 優(yōu)先級類(lèi)別開(kāi)始應用程序
BELOWNORMAL 在 BELOWNORMAL 優(yōu)先級類(lèi)別開(kāi)始應用程序
WAIT 啟動(dòng)應用程序并等候它結束
command/program
如果是內部 cmd 命令或批文件,那么該命令處理器是
用 /K 命令行開(kāi)關(guān)運行 cmd.exe 的。這表示該窗口在命令運行
后仍然存在。
如果不是內部 cmd 命令或批文件,則是一個(gè)程序,并
作為窗口應用程序或控制臺應用程序運行。
parameters 這些為傳送到命令/程序的參數
如果命令擴展名被啟用,通過(guò)命令行或 START 命令的外部命令
調用會(huì )如下改變:
將文件名作為命令鍵入,非可執行文件 可以通過(guò)文件關(guān)聯(lián)調用。
(例如, WORD.DOC 會(huì )調用跟 .DOC 文件擴展名關(guān)聯(lián)的應用程序)。
關(guān)于如何從命令腳本內部創(chuàng )建這些關(guān)聯(lián),請參閱 ASSOC 和
FTYPE 命令。
執行的應用程序是 32-位 GUI 應用程序時(shí),CMD.EXE 不等應用
程序終止就返回命令提示。如果在命令腳本內執行,該新行為
則不會(huì )發(fā)生。
如果執行的命令行的第一個(gè)符號是不帶擴展名或路徑修飾符的
字符串 "CMD","CMD" 會(huì )被COMSPEC 變量的數值所替換。這
防止從當前目錄抓出 CMD.EXE。
如果執行的命令行的第一個(gè)符號沒(méi)有擴展名,CMD.EXE 會(huì )使用
PATHEXT 環(huán)境變量的數值來(lái)決定要以什么順序尋找哪些擴展
名。PATHEXT 變量的默認值是:
.COM;.EXE;.BAT;.CMD
請注意,該語(yǔ)法跟 PATH 變量的一樣,分號隔開(kāi)不同的元素。
查找可執行文件時(shí),如果沒(méi)有相配的擴展名,看一看該名稱(chēng)是否
與目錄名相配。如果確實(shí)如此,START 會(huì )在那個(gè)路徑上調用
Explorer。如果從命令行執行,則等同于對那個(gè)路徑作 CD /D。
可以看到 /Dpath 選項可以指定當前目錄下運行, 所以最后通過(guò)運行的命令語(yǔ)句就是:
cmd /c start /D"D:\Tomcat5.0\bin\" startup.bat, OK, 問(wèn)題成功解決.
代碼:

































聯(lián)系客服