java 当从 main 方法调用批处理文件时,批处理文件中的命令没有被执行

java command inside batch file is not getting executed when batch file is called from main method

我通过以下方式从主要方法调用批处理文件:

public static void main(String args[]){
        Runtime rt=Runtime.getRuntime();
        try {
            Process pr=rt.exec("D:\test1.bat");
            pr.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

批处理文件内容如下:

xcopy d:\a1 d:\a2
call C:\Java\jdk1.6.0_27\bin\java.exe -version >log1.txt 2>&1

执行时,文件夹 a1 中的文件被复制到文件夹 a2,但 log1.txt 未生成。 但是,如果我双击这个批处理文件,文件将被复制,并且 log1.txt 将使用 java.

的版本生成
  • 很可能会在Java应用程序的当前工作目录中生成log1.txt,而不必与.bat文件在同一个目录中。
  • 您提到您使用的是 Eclipse,这会将工作目录默认设置为包含应用程序入口点 (static void main) 的项目目录的顶层,除非您已对其进行更改。
  • 当进行外部更改时,eclipse 不会自动刷新文件系统 - 尝试选择项目,然后选择文件 => 刷新 (F5)

  • Runtime.exec() 有一个重载版本,可让您将工作目录设置为第三个参数..

例子

public static void main(String args[]) {
    Runtime rt = Runtime.getRuntime();
    try {
        Process pr = rt.exec("D:\test1.bat", null, new File("D:\"));
        pr.waitFor();
    } catch (Exception e) {
        e.printStackTrace();
    }
}