2013-09-30 57 views
5

我想从我的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窗口。

+0

如果你说 “开始/?”从命令提示符窗口,它将描述'start'命令的选项;有一个“/ D ”选项可能会有所帮助。 – ajb

回答

20

而不是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(); 
+1

Dir与之前包含的路径相同吗? (“\”C:\\ Program Files \\ salesforce.com \\ Data Loader \\ cliq_process \\ upsert \\ upsert.bat \“”) – Ricardo

+0

如果您使用ProcessBuilder,我相信您不需要报价 – MadProgrammer

+0

@Ricardo感谢您的澄清;我没有做任何假设。我会更新答案,因为这使得它更简单一些。 – rob

6

尝试以下

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

现在很早,所以我可能会错过一些东西,但这与OP所做的有何不同?他们需要在特定位置执行批处理文件 – MadProgrammer

2

你的代码是好的,但问题是里面的批处理文件。

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

0
import java.lang.Runtime; 

Process run = Runtime.getRuntime().exec("cmd.exe", "/c", "Start", "path of the bat file"); 

这将为你工作,易于使用。

1

以下是为我工作

File dir = new File("E:\\test"); 
     ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "Start","test.bat"); 
     pb.directory(dir); 
     Process p = pb.start();