【问题标题】:Java switch directories and then fire command with parametersJava切换目录,然后用参数触发命令
【发布时间】:2019-11-30 14:45:54
【问题描述】:

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

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)

预期的输出应该是:

那么我这样做对吗?

按照 Andreas 的建议

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,系统找不到指定的文件

【问题讨论】:

  • 不,你应该使用ProcessBuilder而不是Runtime.exec,因为它支持设置工作目录,直接发送输出到控制台等。
  • @Andreas 我用你的建议更新了我的 OP... 似乎仍然不起作用。
  • 什么是scm?一个.exe文件?还是 .bat 或 .cmd 文件?还有什么?
  • 该目录中的一个 .exe 文件

标签: java process inputstream runtime.exec


【解决方案1】:

您应该使用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 自己的输出将发送到的任何地方。

【讨论】:

  • 似乎也不起作用:无法运行程序“scm.exe”(在目录“C:\Local Apps\IBM\SDP\scmtools\eclipse”中):CreateProcess 错误= 2、系统找不到指定的文件
猜你喜欢
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
相关资源
最近更新 更多