如何从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");
你必须运行 “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。它可以在环境中,应用程序配置文件中设置,它可以是当前用户目录或其他任何东西。
不适用于我不知道为什么 – 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);
对我来说真的很新颖。 – Arshed 2015-04-21 08:56:17
Runtime类中没有“exec”方法,它带有三个字符串参数。 – 2009-09-14 12:41:31
的确如此。我的意思是的String []的版本,但我不能够输入方parenthsis在SO文本框...我想我必须阅读SO手册/维基... – PeterMmm 2009-09-14 13:55:10
可以说我有,都应该运行三个命令从CMD然后是三个单独的CMD窗口将打开每个命令的,是有办法,我可以在一个CMD窗口执行所有三个命令.. – viveksinghggits 2016-06-28 07:56:24