2

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

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 版本生成。

4

1 回答 1

1
  • 很可能会在 Java 应用程序的当前工作目录中生成 log1.txt,该目录不必与 .bat 文件位于同一目录。
  • 您提到您使用的是 Eclipse,除非您已更改它,否则默认情况下会将工作目录设置为包含应用程序入口点的项目目录的顶层(静态 void main)。
  • 进行外部更改时,eclipse 不会自动刷新文件系统 - 尝试选择项目,然后 File => Refresh (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();
    }
}
于 2015-03-17T06:37:02.687 回答