无法通过java运行cmd命令

时间:2015-05-07 07:46:00

标签: java cmd processbuilder

我有一个名为.bat的{​​{1}}文件。我在galen.bat环境变量中包含了此文件的路径。

当我跑步时:

PATH

galen.bat --version 中,我得到以下输出:

cmd

我有以下Galen Framework Version: 1.6.3 JavaScript executor: Rhino 1.7 release 5 2015 01 29 代码,我试图通过我的应用程序运行相同的命令 -

java

当我运行时,我收到以下错误 -

 public static void main(String[] args) throws Exception {
            ProcessBuilder builder = new ProcessBuilder(
                "cmd.exe", "/c", "galen.bat --version");
            builder.redirectErrorStream(true);
            Process p = builder.start();
            BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
            String line;
            while (true) {
                line = r.readLine();
                if (line == null) { break; }
                System.out.println(line);
            }
        }

请注意,如果我使用

'galen.bat' is not recognized as an internal or external command,
operable program or batch file.

而不是

ProcessBuilder builder = new ProcessBuilder(
                    "cmd.exe", "/c", "java -version");

然后我在我的eclipse控制台窗口中得到了正确的输出 -

ProcessBuilder builder = new ProcessBuilder(
                    "cmd.exe", "/c", "galen.bat --version");

为什么java version "1.7.0_03" Java(TM) SE Runtime Environment (build 1.7.0_03-b05) Java HotSpot(TM) 64-Bit Server VM (build 22.1-b02, mixed mode) 无效?我该如何解决? 谢谢!

1 个答案:

答案 0 :(得分:1)

根据the docs

  

当Java应用程序使用ProcessBuilder对象创建新进程时,传递给新进程的默认环境变量集与提供给应用程序虚拟机进程的相同集。应用程序可以使用ProcessBuilder.environment更改此集。

因此,您必须在JVM的路径中包含galen.bat的新路径,或将ProcessBuilder.environment更改为您的系统PATH,但according this answer,似乎最后一个选项不是可能的。