【问题标题】:Java Process Builder Command Error, Escaping double quotesJava Process Builder 命令错误,转义双引号
【发布时间】:2013-07-11 17:26:13
【问题描述】:

在 CMD 中键入以下语句可以正常工作

wmic /node:IP /user:Someuser /password:PWD Process Call Create "cmd /c echo 'Required_Info' %SystemDrive% %SystemRoot%"

我正在尝试通过 java process builder 执行相同的操作。这是代码。

//some code
String wmic_cmd = "Process Call Create";
String wmic2 = " \"cmd /c echo 'Required_Info' %SystemDrive% %SystemRoot% \"";
cmdTokens.add(wmic_cmd);
cmdTokens.add(wmic2);
/*debug and checked the value of cmdTokens array - it was
[wmic, /node:10.0.0.0, /user:Someuser, /password:PWD, Process Call Create,  "cmd /c echo 'Required_Info' %SystemDrive% %SystemRoot% "] 
*/
ProcessBuilder pb = new ProcessBuilder(cmdTokens.toArray(new String[]{}));
Process proc = pb.start();

当我检查 proc 的错误流时,我得到以下信息 -

Process Call Create - Alias not found.

这表示 WMIC 的语法错误。所以在将命令字符串数组发送到进程构建器时出现了问题。

有什么想法吗??

【问题讨论】:

  • 阅读(并实施)所有 When Runtime.exec() won't 的建议。那可能会解决问题。如果没有,它应该提供更多关于失败原因的信息。然后忽略它引用exec 并(继续)使用ProcessBuilder 构建Process。还要将 String arg 拆分为 String[] args 以说明本身包含空格的参数。

标签: java string escaping processbuilder


【解决方案1】:

鉴于您的命令行和您想要做的事情,这不是如何去做。使用:

final List<String> cmd = Arrays.asList("wmic", "/node:IP", "/user:Someuser",
    "/password:PWD", "Process", "Call", "Create",
    "cmd /c echo 'Required_Info' %SystemDrive% %SystemRoot%"
)

// build processBuilder using cmd.toArray(new String[cmd.size()]) as a command

cmd /c echo etc 周围的引号是为了防止 命令解释器 分隔参数。当您传递原始参数时无需复制它们,这就是您使用 ProcessBuilder 的方式。

【讨论】:

  • 谢谢...不知道 processbuilder 中的参数逻辑。
猜你喜欢
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-26
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
相关资源
最近更新 更多