Java 切换目录然后使用参数触发命令

Java switch directories and then fire command with parameters

嘿,我正在尝试更改目录,然后 运行 我的带参数的命令。

final String path = "\Local// Apps\IBM\SDP\scmtools\eclipse";
final String command = "scm help";
final String dosCommand = "cmd /c \""  + path + "\"" + command;
final Process process = Runtime.getRuntime().exec(dosCommand);
final InputStream in = process.getInputStream();
int ch;

while((ch = in.read()) != -1) {
    System.out.print((char)ch);
}

运行没有错误,但没有输出任何内容。然而,这是完成后显示的内容:

<terminated, exit value: 0>C:\Local Apps\IBM\SDP\jdk\bin\javaw.exe (Jul 22, 2019, 11:21:37 AM)

预期的输出应该是:

那么我这样做正确吗?

如安德烈亚斯所建议

Process p = null;
ProcessBuilder pb = new ProcessBuilder("scm.exe");
pb.directory(new File("C:/Local Apps/IBM/SDP/scmtools/eclipse"));
p = pb.start();

我收到以下错误:

Cannot run program "scm.exe" (in directory "C:\Local Apps\IBM\SDP\scmtools\eclipse"): CreateProcess error=2, The system cannot find the file specified

您应该使用 ProcessBuilder 而不是 Runtime.exec,例如

Process proc = new ProcessBuilder("scm.exe", "help")
        .directory(new File("C:\Local Apps\IBM\SDP\scmtools\eclipse"))
        .inheritIO()
        .start();
proc.waitFor(); // optional

如果需要,您也可以通过命令解释器,例如如果命令是脚本(.bat 或 .cmd 文件):

Process proc = new ProcessBuilder("cmd", "/c", "scm", "help")
        .directory(new File("C:\Local Apps\IBM\SDP\scmtools\eclipse"))
        .inheritIO()
        .start();
proc.waitFor();

inheritIO()表示您不需要处理命令输出。它将被发送到控制台,或者 Java 自己的输出所在的任何地方。