如何从java执行批处理文件?

问题描述:

我想从Java程序执行批处理文件。如何从java执行批处理文件?

我使用下面的命令。

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

但问题是,我想给一个reative路径,而不是绝对路径,这样我可以部署在任何补偿该Java项目。

项目的目录结构就像如下:

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

我要运行“Server.bat”中的“UTIL” DIR从“Main.java”文件文件中的“解析器“目录。

当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

你必须运行 “cmd.exe的” 与参数 “/ c” 和 “server.bat”:

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

您可以使用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

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 
} 

你最好的赌注是存储系统上的应用程序的安装目录,然后用它来在应用程序中建立自己的路径。 System.getProperty(“user.dir来”)应在Windows和Unix平台上工作,以获得当前的工作目录,但它是依赖于系统的,所以要意识到这一点。

第二个参数给exec是一个String [] args作为环境设置的(null意味着继承进程的当前的)和第三参数给exec应该提供工作目录中的文件。试试这个:

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

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

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

对我来说真的很新颖。 – Arshed 2015-04-21 08:56:17