从Java代码运行批处理文件

我正在尝试从Java可执行文件运行另一个目录中的批处理文件。 我有以下代码:

try { Process p = Runtime.getRuntime().exec("cmd /c start \"C:\\Program Files\\salesforce.com\\Data Loader\\cliq_process\\upsert\\upsert.bat\"") ; } catch (IOException ex) { } 

结果是程序在运行程序的根目录中打开一个cmd窗口,并且不访问我提供的文件路径。

而不是Runtime.exec(String command) ,您需要使用exec(String command, String[] envp, File dir)方法签名:

 Process p = Runtime.getRuntime().exec("cmd /c upsert.bat", null, new File("C:\\Program Files\\salesforce.com\\Data Loader\\cliq_process\\upsert")); 

但就个人而言,我会使用ProcessBuilder ,它比Runtime.exec()更冗长,但更容易使用和调试。

 ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "upsert.bat"); File dir = new File("C:/Program Files/salesforce.com/Data Loader/cliq_process/upsert"); pb.directory(dir); Process p = pb.start(); 

尝试下面

 try { String[] command = {"cmd.exe", "/C", "Start", "D:\\test.bat"}; Process p = Runtime.getRuntime().exec(command); } catch (IOException ex) { } 

您的代码很好,但问题出在批处理文件中。

您必须显示bat文件的内容,您的问题是在bat文件内的路径中。

以下是为我工作

 File dir = new File("E:\\test"); ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "Start","test.bat"); pb.directory(dir); Process p = pb.start(); 
 import java.lang.Runtime; Process run = Runtime.getRuntime().exec("cmd.exe", "/c", "Start", "path of the bat file"); 

这对您有用,并且易于使用。