【问题标题】:Run batch file from Java code从 Java 代码运行批处理文件
【发布时间】:2013-09-30 20:50:01
【问题描述】:

我正在尝试从我的 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窗口,并且没有访问我提供的文件路径。

【问题讨论】:

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

标签: java batch-file


【解决方案1】:

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

【讨论】:

  • Dir 与我之前包含的路径相同吗? ("\"C:\\Program Files\\salesforce.com\\Data Loader\\cliq_process\\upsert\\upsert.bat\"")
  • 如果您使用 ProcessBuilder,我相信您将不需要引号
  • @rob 我最近rejected an edit 来自用户声称编辑是因为编译错误。如果答案有效,请编辑您的答案。
  • 问题已解决,维护命令窗口:-List cmdAndArgs = Arrays.asList(new String[]{"cmd.exe", "/C", "Start", "run.bat"});
  • @SaurabhBhoomkar 当然,只需将 /c 替换为 /k。请注意,如果您的进程将大量信息写入 STDOUT 或 STDERR,您将需要使用这些流。您可以启动读取进程控制台流的线程并将该输出写入 Java 程序的控制台和/或日志文件。如果您不使用流,则该进程可能会阻塞并在缓冲区填满时似乎挂起。
【解决方案2】:

尝试关注

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

【讨论】:

  • 现在还早,所以我可能会遗漏一些东西,但这与 OP 所做的有什么不同?他们需要在特定位置执行批处理文件
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    以下对我有用

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

    【讨论】:

      【解决方案5】:
      import java.lang.Runtime;
      
      Process run = Runtime.getRuntime().exec("cmd.exe", "/c", "Start", "path of the bat file");
      

      这对你有用,而且易于使用。

      【讨论】:

        猜你喜欢
        • 2017-03-07
        • 1970-01-01
        • 1970-01-01
        • 2017-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-18
        相关资源
        最近更新 更多