【问题标题】:Run cmd-line in java fails在 java 中运行 cmd-line 失败
【发布时间】:2012-07-27 22:07:20
【问题描述】:

我面临以下问题:

我正在 Eclipse 中编写一个 java 应用程序。在我的应用程序中,我想启动一个 cmd 命令:

C:/Users/User1/Content-Integration Testing Framework/JDBC Connector/bin/connect -h

“connect -h”命令是一个运行良好的企业内部应用程序。 如果我要使用命令行,那么我的当前目录就必须像这样:

cd C:/Users/User1/Content-Integration Testing Framework/JDBC Connector/bin/

然后我只需输入connect -h 这很好用。但我并不确定如何在 Java 应用程序中执行此命令。

这里他们告诉我如何在 java 应用程序中运行 cmd: How to use "cd" command using Java runtime?

但如果我这样做:

Runtime.getRuntime().exec("'C:/Users/User1/Content-Integration Testing Framework/JDBC Connector/bin/connect' -h");

Eclipse 告诉我:

java.io.IOException: Cannot run program "'C:/Users/User1/Content-Integration": CreateProcess error=2, Das System kann die angegebene Datei nicht finden
    at java.lang.ProcessBuilder.start(Unknown Source)

它在“内容集成”处切断了我的命令。

有人可以帮帮我吗?

【问题讨论】:

    标签: java command-line execution


    【解决方案1】:

    您应该通过String 数组使用exec()takes multiple args 的版本。

    Runtime.exec(String s) 将使用标记器拆分您的字符串(这就是为什么引用字符串不起作用,以及为什么您会看到您的行为)。如果您自己解析可执行文件和参数,并将每个作为上述数组元素传递,例如

    String[] args = new String[]{"executable", "arg1", "arg2"};
    Runtime.getRuntime().exec(args); // don't forget to collect stdout/err etc.
    

    那么你将绕过Runtime.exec(String s)的分裂行为。

    【讨论】:

    • 刚刚尝试了我提出的解决方案(包括路径中的空格),它按预期工作......
    • 好的,非常感谢您的重播。第一个问题解决了。我输入了以下内容: Process p = Runtime.getRuntime().exec(new String[]{"C:/Users/User1/'Content-Integration Testing Framework/JDBC Connector/bin/","connect","-h "});它没有拆分我的第一个参数,但现在有一个类似的问题:java.io.IOException: Cannot run program "C:/Users/User1/'Content-Integration Testing Framework/JDBC Connector/bin/": CreateProcess error=2 , Das System kann die angegebene Datei nicht finden
    • @Metalhead89 'User1 之后似乎多了一个引号
    • 我犯了一个错误:中间有一个“'”,但它仍然不起作用:它告诉我:java.io.IOException: ......: CreateProcess error=5, Zugriff verweigert
    • @Metalhead89 你的意思可能是:Process p = Runtime.getRuntime().exec(new String[]{"C:/Users/User1/Content-Integration Testing Framework/JDBC Connector/bin/connect","-h"})(第一个字符串中带有connect
    【解决方案2】:

    你试过了吗:

    Runtime.getRuntime().exec("\"C:/Users/User1/Content-Integration Testing Framework/JDBC Connector/bin/connect\" -h");
    

    【讨论】:

      【解决方案3】:

      发生这种情况是因为您的路径包含空格。确保将其包裹在“”中,它会起作用。

      Runtime.getRuntime().exec("\"C:/Users/User1/Content-Integration Testing Framework/JDBC Connector/bin/connect\" -h");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多