gpt4 book ai didi

java - ProcessBuilder 向命令行添加额外的引号

转载 作者:太空宇宙 更新时间:2023-11-04 12:15:48 25 4
gpt4 key购买 nike

我需要使用 ProcessBuilder 构建以下命令:

"C:\Program Files\USBDeview\USBDeview.exe" /enable "My USB Device"

我尝试了以下代码:

ArrayList<String> test = new ArrayList<String>();
test.add("\"C:\\Program Files\\USBDeview\\USBDeview.exe\"");
test.add("/enable \"My USB Device\"");

ProcessBuilder processBuilder = new ProcessBuilder(test);
processBuilder.start().waitFor();

但是,这会将以下内容传递给系统(使用 Sysinternals Process Monitor 验证)

"C:\Program Files\USBDeview\USBDeview.exe" "/enable "My USB Device""

注意 /enable 之前的引号和 Device 之后的两个引号。我需要去掉那些额外的引号,因为它们会使调用失败。有谁知道如何做到这一点?

最佳答案

Joachim 是正确的,但当您的流程需要如下统一参数时,他的回答是不够的:

myProcess.exe /myParameter="my value"

正如 stefan 所见,ProcessBuilder 会在您的参数中看到空格并将其用引号引起来,如下所示:

myProcess.exe "/myParameter="my value""

按照 Joachim 的建议拆分参数值将导致 /myparameter="my value" 之间有一个空格,这不适用于此类参数:

myProcess.exe /myParameter= "my value"

根据 Sun 的说法,在他们的 infinite wisdom , 这不是错误和双引号 can be escaped实现所需的行为。

因此,为了最终回答 stefan 的问题,如果您调用的进程正确执行操作,那么这是一个应该可行的替代方案:

ArrayList<String> test = new ArrayList<String>();
test.add("\"C:\\Program Files\\USBDeview\\USBDeview.exe\"");
test.add("/enable \\\"My USB Device\\\"");

这应该为您提供命令 "C:\Program Files\USBDeview\USBDeview.exe""/enable\"My USB Device\"",这可能会起作用; YMMV.

关于java - ProcessBuilder 向命令行添加额外的引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47472280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com