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

Yat*_*oel 10 java batch-file

我想从java程序执行批处理文件.

我使用以下命令.

Runtime.getRuntime().exec("server.bat");
Run Code Online (Sandbox Code Playgroud)

但问题是我想给出一个reative路径而不是绝对路径,以便我可以在任何comp上部署该java项目.

项目的目录结构如下:

com
   |
  project
   |
   ------ parser
   |         |_____ Main.java
   |
   -------util
             |_____ Server.bat
Run Code Online (Sandbox Code Playgroud)

我想从"parser"目录中的"Main.java"文件中运行"util"目录中的"Server.bat"文件.

Ror*_*ick 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();
Run Code Online (Sandbox Code Playgroud)

当然,您的应用必须从某个地方获得deployDir.它可以在环境中设置,在应用程序配置文件中,可以是当前用户目录或其他任何内容.


Jes*_*erE 6

您必须使用参数"/ c"和"server.bat"运行"cmd.exe":

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


Pet*_*Mmm 5

当Java运行并且您使用带有相对路径的Runtime.exec()时,相对意味着相对于调用JVM的当前用户目录.

这可能有效

Runtime.getRuntime().exec("cmd.exe", "/c", "./com/projct/util/server.bat");
Run Code Online (Sandbox Code Playgroud)

如果你从com的父目录启动java.

或者你必须计算一个绝对路径:

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

我忘了,读Runtime.exec()时不会.


use*_*421 5

如果支持(Java 1.6),您可以尝试使用桌面

    File file = new File("server.bat");
    Desktop.getDesktop().open(file);
Run Code Online (Sandbox Code Playgroud)