从Java代码运行批处理文件

时间:2013-09-30 20:50:01

标签: java batch-file

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

5 个答案:

答案 0 :(得分:29)

而不是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 :(得分:6)

尝试以下

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

以下是为我工作

 AlertDialog.Builder wdsBuilder = new AlertDialog.Builder(this);
    View dialogView = LayoutInflater.from(this).inflate(R.layout.item_dialog, null);
    dialogView.setBackgroundColor(Color.TRANSPARENT);
    TextView alertTextView = (TextView)dialogView.findViewById(R.id.text);
    wdsBuilder.setView(dialogView).setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int whichButton) {
          Log.e("Dismiss","called");
        }
    });
    AlertDialog wdsAlert = wdsBuilder.create();
    wdsAlert.show();

答案 4 :(得分:0)

import java.lang.Runtime;

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

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