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

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


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)

预期的输出应该是:

http://img3.mukewang.com/6437b46a0001910904010275.jpg

那我这样做正确吗?


正如安德烈亚斯所建议的


Process p = null;

ProcessBuilder pb = new ProcessBuilder("scm.exe");

pb.directory(new File("C:/Local Apps/IBM/SDP/scmtools/eclipse"));

p = pb.start();

我收到以下错误:


无法运行程序“scm.exe”(在目录“C:\Local Apps\IBM\SDP\scmtools\eclipse”中):CreateProcess error=2,系统找不到指定的文件


ITMISS
浏览 175回答 1
1回答

繁星淼淼

你应该使用ProcessBuilderinstead of 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 自己的输出所在的任何地方。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java