从main方法调用批处理文件时,不会执行批处理文件中的java命令

时间:2015-03-17 06:24:58

标签: java batch-file java-batch

我通过以下方式从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。 但是,如果我双击此批处理文件,则会复制文件,并使用java版本生成log1.txt。

1 个答案:

答案 0 :(得分:1)

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

  • Runtime.exec()的重载版本允许您将工作目录设置为第3个参数..

实施例

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();
    }
}