【问题标题】:Not able to run cmd command through java无法通过java运行cmd命令
【发布时间】:2015-05-07 07:45:59
【问题描述】:

我有一个名为galen.bat.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");

而不是

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

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

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)

为什么galen.bat --version 不起作用?我该如何解决? 谢谢!

【问题讨论】:

  • 你试过给.bat文件的完整路径吗?
  • 尝试提供 bat 文件的完整路径,或者(可能不太有用)将其放在 java 应用程序的工作目录中。
  • 您的整个代码是此答案stackoverflow.com/questions/15464111/… 的副本,其中清楚地提到了它所做的事情..您的代码中缺少..仔细阅读该答案

标签: java cmd processbuilder


【解决方案1】:

根据the docs

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

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

【讨论】:

    猜你喜欢
    • 2021-05-18
    • 1970-01-01
    • 2010-10-16
    • 2016-06-03
    • 1970-01-01
    • 2015-07-12
    • 2021-05-03
    • 2015-01-23
    相关资源
    最近更新 更多