2009-09-14 52 views
8

我想從Java程序執行批處理文件。如何從java執行批處理文件?

我使用下面的命令。

Runtime.getRuntime().exec("server.bat"); 

但問題是,我想給一個reative路徑,而不是絕對路徑,這樣我可以部署在任何補償該Java項目。

項目的目錄結構就像如下:

com 
    | 
    project 
    | 
    ------ parser 
    |   |_____ Main.java 
    | 
    -------util 
      |_____ Server.bat 

我要運行「Server.bat」中的「UTIL」 DIR從「Main.java」文件文件中的「解析器「目錄。

回答

5

當Java的運行和使用的Runtime.exec()使用相對路徑,相對於當前用戶的豬病,在JVM被調用相對的手段。

這可能工作

Runtime.getRuntime().exec("cmd.exe", "/c", "./com/projct/util/server.bat"); 

如果從COM的父目錄啓動Java。

或者你必須計算的絕對路徑:

Runtime.getRuntime().exec("cmd.exe", "/c", 
System.getProperty("user.dir")+"/com/projct/util/server.bat"); 

我忘了,讀When Runtime.exec() won't

+0

Runtime類中沒有「exec」方法,它帶有三個字符串參數。 – 2009-09-14 12:41:31

+0

的確如此。我的意思是的String []的版本,但我不能夠輸入方parenthsis在SO文本框...我想我必須閱讀SO手冊/維基... – PeterMmm 2009-09-14 13:55:10

+0

可以說我有,都應該運行三個命令從CMD然後是三個單獨的CMD窗口將打開每個命令的,是有辦法,我可以在一個CMD窗口執行所有三個命令.. – viveksinghggits 2016-06-28 07:56:24

6

你必須運行 「cmd.exe的」 與參數 「/ c」 和 「server.bat」:

Runtime.getRuntime().exec(new String[] { "cmd.exe", "/c", "server.bat" }); 
8

您可以使用ProcessBuilder這一點。它比exec提供更多的控制。特別是,它允許用方法directory設置工作目錄。

例子:

ProcessBuilder pb = new ProcessBuilder("server.bat"); 
pb.directory(new File(deployDir + "\\com\\project\\util")); 
Process p = pb.start(); 
int exitStatus = p.waitFor(); 

當然,你的應用程序必須從某處得到deployDir。它可以在環境中,應用程序配置文件中設置,它可以是當前用戶目錄或其他任何東西。

+0

不適用於我不知道爲什麼 – 2017-09-20 23:23:49

0

Plexus utils提供了可調用的任意命令行和處理輸出的解析一個命令類型。

Commandline cl = new Commandline(); 

cl.setExecutable("cmd.exe"); 
cl.createArg().setValue("/c"); 

cl.setWorkingDirectory(new File(System.getProperty("user.dir"), 
    "/com/project/util/Server.bat")); 

cl.createArg().setValue("/c"); 

StreamConsumer consumer = new StreamConsumer() { 
    public void consumeLine(String line) { 
     //do something with the line 
    } 
}; 

StreamConsumer stderr = new StreamConsumer() { 
    public void consumeLine(String line) { 
     //do something with the line 
    } 
}; 

int exitCode; 

try { 
    exitCode = CommandLineUtils.execute(cl, consumer, stderr, getLogger()); 
} catch (CommandLineException ex) { 
    //handle exception 
} 
0

你最好的賭注是存儲系統上的應用程序的安裝目錄,然後用它來在應用程序中建立自己的路徑。 System.getProperty(「user.dir來」)應在Windows和Unix平臺上工作,以獲得當前的工作目錄,但它是依賴於系統的,所以要意識到這一點。

0

第二個參數給exec是一個String [] args作爲環境設置的(null意味着繼承進程的當前的)和第三參數給exec應該提供工作目錄中的文件。試試這個:

Runtime.getRuntime().exec("cmd /c server.bat", null, new File("./com/project/util")); 
4

如果支持的話,你可以在桌面上試試它(Java 1。6)

File file = new File("server.bat"); 
    Desktop.getDesktop().open(file); 
+0

對我來說真的很新穎。 – Arshed 2015-04-21 08:56:17