Java Process Builder 命令错误,转义双引号

标签 java string escaping processbuilder

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

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

我正在尝试通过java进程生成器执行相同的操作。这是代码。

//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 存在语法错误。因此,将命令字符串数组发送到进程构建器时出现了问题。

有什么想法吗?

最佳答案

鉴于您的命令行和您想要执行的操作,这不是执行方法。使用:

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 等周围的引号是为了防止命令解释器分隔参数。当您传递原始参数时无需复制它们,这就是您与 ProcessBuilder 一起使用的内容。

关于Java Process Builder 命令错误,转义双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17599725/

相关文章:

java - 无法在 JBoss 6.4 EAP 中部署 Spring Boot EAR

java - Android 应用程序仅播放一次声音

Java GWT在应用自定义celltable/datagrid css样式时如何编写文件路径

Java将新文件的数据附加到旧文件

java - 按元音数量对 ArrayList 中的字符串进行排序

java - 使用 ObjectOutputStream 写入文件而不覆盖旧数据

linq - 自动生成的 sql 代码 : single backslash as an escape character is failing

android - 在 Android 中转义多个 “%” 字符

sql - PostgreSQL 检查匹配正则表达式的表数

bash - 如何在 ssh pkill bash 命令中正确转义双引号?