使用Java,在同一cmd.exe窗口中运行多个命令

时间:2014-06-25 10:02:09

标签: java windows cmd runtime

我正在开发一个偶尔会在Windows计算机上运行的Java应用程序。 在某些时候,我需要运行一个Cygwin提示并在其中执行一些命令。

我找到了一个使用Runtime类的主题: http://www.javaquery.com/2011/03/how-to-execute-multiple-command-in.html

但是它没有启动真正的 cmd.exe 窗口,它只在后台运行,输出只是打印在Eclipse控制台上。

我正在寻找运行真正的 cmd.exe 窗口的解决方案,我需要将尽可能多的命令传递给Windows shell。 这可能吗?

3 个答案:

答案 0 :(得分:5)

这个有用...使用&&运算符,您可以在同一命令提示符中添加一个或要执行的命令

try {
    Process p = Runtime
                    .getRuntime()
                    .exec("cmd /c start cmd.exe /K \"dir && ping localhost && echo end\"");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 

考虑here中的解决方案

来自提问者的更新:在cygwin中执行命令的解决方案

getRuntime().exec("cmd /c start C:/cygwin64/bin/bash.exe --login -c \"ls ; whoami ; exec bash\"");

答案 1 :(得分:0)

不太确定,但如果我正确理解您的问题,请尝试:对于java conifguration面板上的窗口,应该取消选中show console按钮。

答案 2 :(得分:0)

如果您不需要在屏幕上显示控制台,那很容易。您可以采取以下简单步骤:

  • 通过`Process cmd = new ProcessBuilder(“cmd.exe”)启动Process。start();
  • 将您的命令发送至cmd.getOutputStream()
  • cmd.getInputStream()和/或cmd.getErrorStream()
  • 中读取命令的结果
  • 完成后,关闭cmd.getOutputStream(),如有必要,请按cmd.destroy()
  • 删除该过程

Optionnaly,您可以合并输出和错误流:

Process cmd = new ProcessBuilder("cmd.exe").redirectErrorStream(true).start();

然后您只需忽略cmd.getErrorStream(),只能从cmd.getInputStream()

中读取