为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

ITMISS 2023-04-13 15:50:10
嘿,我正在尝试更改目录,然后使用参数运行我的命令。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();我收到以下错误:无法运行程序“scm.exe”(在目录“C:\Local Apps\IBM\SDP\scmtools\eclipse”中):CreateProcess error=2,系统找不到指定的文件
查看完整描述

1 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

你应该使用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 自己的输出所在的任何地方。



查看完整回答
反对 回复 2023-04-13
  • 1 回答
  • 0 关注
  • 174 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信