java - Windows空间中* .exe路径和参数中的java ProcessBuilder

标签 java windows command-line processbuilder

经常讨论,但这似乎是一种奇怪的情况。
在win cmd.exe中,我成功运行:

"c:\Program Files\myapp.exe" -my_arg="sth. with space"
"c:\Program Files\myapp.exe" -my_arg="sth_without_space"
在Java ProcessBuilder.command(xxx)中,以下操作失败,并且“c:\Program”不是有效命令(xxx包含以下数组):
// using cmd.exe:
["cmd.exe", "/c", "c:\Program Files\myapp.exe", "-my_arg=sth. with space"]         // no extra quoting
["cmd.exe", "/c", "\"c:\Program Files\myapp.exe\"", "-my_arg=sth. with space"]     // exe       quoted
["cmd.exe", "/c", "\"c:\Program Files\myapp.exe\"", "-my_arg=\"sth. with space\""] // exe & arg quoted
["cmd.exe", "/c", "c:\Program Files\myapp.exe", "-my_arg=\"sth. with space\""]     //       arg quoted

// putting all as cmd.exe arg:
["cmd.exe", "/c", "c:\Program Files\myapp.exe -my_arg=sth. with space"]            // no extra quoting
["cmd.exe", "/c", "\"c:\Program Files\myapp.exe\" -my_arg=sth. with space"]        // exe       quoted
["cmd.exe", "/c", "\"c:\Program Files\myapp.exe\" -my_arg=\"sth. with space\""]    // exe & arg quoted
["cmd.exe", "/c", "c:\Program Files\myapp.exe -my_arg=\"sth. with space\""]        //       arg quoted

// calling *.exe directly
["c:\Program Files\myapp.exe", "-my_arg=sth. with space"]                          // no extra quoting
["\"c:\Program Files\myapp.exe\"", "-my_arg=sth. with space"]                      // exe       quoted
["\"c:\Program Files\myapp.exe\"", "-my_arg=\"sth. with space\""]                  // exe & arg quoted
["c:\Program Files\myapp.exe", "-my_arg=\"sth. with space\""]                      //       arg quoted
运行此工作正常:
["cmd.exe", "/c", "c:\Program Files\myapp.exe", "-my_arg=sth_without_space"]
当* .exe路径和arg包含空格时,问题似乎开始。
[编辑]:
我的问题是:如何在exe的路径和arg的内容中使用空格运行它?

最佳答案

要使其与cmd和WITH空格一起使用,您需要添加另一层引用。
毕竟,您编写了一个Java程序。 Java编译器期望将字符串加引号,但在运行时这些引号不再存在。一些字符串将用于启动cmd,其他字符串将传递给cmd。
Cmd本身会检查接收到的参数并将对其进行解析。要标记哪个空格是定界符而哪个不是,您需要带引号。 Cmd将理解这些引号并将其删除-被调用的程序不再注意到它们。
因此,要么添加更多引号(使用正确的转义符),要么尝试直接运行可执行文件。

["cmd.exe", "/c", "\"c:\\Program Files\\myapp.exe\"", "\"-my_arg=sth_with space\""]

关于java - Windows空间中* .exe路径和参数中的java ProcessBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66045955/

相关文章:

java - 当我们获取bean时,SpringBoot WebMvcConfigurationSupport没有采用configureMessageConverters

windows - inno setup创建的vb脚本快捷方式出错

windows - 从 Windows cmd 使用 cygwin 在后台运行命令

java - Java 中的多态值

java - EJB 3.0 异常处理

c++ - QApplication : No such file or directory with Qt5 and qtsingleapplication on windows

linux - linux 中的 unicode 字符在 Windows 中不起作用

python - 检索 Python 解释器的命令行参数

python - Perforce - 创建和编辑更改列表

java - 在面向 Oreo 的 Android 应用程序上使用 Android Broadcast