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();
}
}
我通过以下方式从主要方法调用批处理文件:
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();
}
}