2012-08-09 64 views
3

我正在尋找通過命令行執行外部程序,但我發現我只能夠這樣做,如果程序存在於我稱之爲目錄的目錄中從。我希望能夠從任何目錄執行該程序。Java:執行一個外部程序&路徑變量

我已經爲windows(7)設置了Path變量,並且能夠通過命令行手動從任何目錄執行程序;但是我無法通過Java來實現。

相關代碼:

Runtime rt = Runtime.getRuntime(); 

Process proc = rt.exec(new String[]{"C:\\AutomateKPI\\GetLog.exe", "-e", rossIP}); 

我的問題是,上述程序的輸出產生一個一般文件名爲「log.txt的」。這在線程程序時會導致問題。如果不可能使用路徑變量,或者我可以將程序複製到新目錄中,然後刪除它。我想避免這樣做。

編輯:上面的代碼作爲GetLog.exe駐留在C:\ AutomateKPI中。我想引用%PATH%,所以我可以從C:\ AutomateKPI \ * NewDir *

+0

什麼是你的錯誤,也是目錄c:\ automateKPI中的GetLog.exe? – 2012-08-09 14:14:26

+0

我沒有收到錯誤信息,但我希望對我的程序進行編程並在各種目錄中執行GetLog.exe。 C:\ AutomateKPI \ * NEWDIR * \ GetLog.exe 而不復制GetLog.exe到新創建的目錄 – Yabo9797 2012-08-09 14:20:32

+0

是的,你的問題是,你所提供的是完整路徑getlog.exe,它不存在中那條路。您需要在其實際路徑中執行getlog.exe,然後提供一個工作目錄。 – 2012-08-09 18:31:05

回答

5

嘗試使用ProcessBuilder。它允許你指定的工作目錄:

String commandPath = "C:" + File.pathSeparator + 
        AutomateKPI" + File.pathSeparator + "GetLog.exe"; 
ProcessBuilder pb = new ProcessBuilder(commandPath, "-e", rossIP); 
pb.directory(new File("intendedWorkingDirectory")); 
Process p = pb.start(); 

或者,如果C:\ AutomateKPI是在你的%PATH%

ProcessBuilder pb = new ProcessBuilder("GetLog.exe", "-e", rossIP); 

這是從文檔還不清楚,但ProcessBuilder似乎找到的東西一種與系統類似的方式,例如在Windows上使用%PATH%

+0

這是正確的嗎? Process proc = rt.exec(new String [] {「exec cmd/c GetLog.exe」,「-e」,rossIP}) – Yabo9797 2012-08-09 14:13:36

+0

'exec'是一個cmd命令,本身不是程序。 – 2012-08-09 14:16:48

+0

使用ProcessBuilder,您可以設置/更改Process的環境變量。 – 2012-08-09 14:17:30

0

嘛,只要你知道你打開程序的路徑,你不必使用CMD,這應該工作,每次:

​​