gpt4 book ai didi

java - 当你不知道是否有空格时使用 Java 的 exec 命令

转载 作者:搜寻专家 更新时间:2023-10-31 19:35:58 25 4
gpt4 key购买 nike

我正在与 Java 的运行时 exec 方法中的空格错误作斗争。这是此问题的独特之处:我尝试执行的命令是一个传入字符串,可能有也可能没有空格,并且不一定是任何特定格式。无论哪种方式,我都需要执行它。如果没有空格,我很好;如果有空格,我就不太好了。

我该如何解释这两种情况?

不额外收费的额外信息:其中一个大问题似乎是我正在尝试调用 c:\program files\blablabla 中的可执行文件...而 exec 似乎在 'c:\程序'。我确信参数也会出现其他问题。

这是我可能得到的字符串类型的更具体示例。这应该可以消除一些困惑:

  • c:\someApp\someapp.exe
  • c:\someApp\someapp.exe -someParam=foo
  • c:\program files\someapp\someapp.exe
  • c:\program files\someapp\someapp.exe -someParam=bar

第一个工作正常,因为它没有空格。第二个甚至还可以,因为它在空间上进行了拆分,并将第一个用作命令,将第二个用作参数。第三个和第四个示例在第一个空格上拆分,使用“C:\program”和命令“files...”和(在第四个字符串的情况下)“-someParam=bar”作为参数。

最佳答案

实际上,我会将其作为答案而不是评论:(来自 J2SE 1.5,Runtime.exec(String[]))

假设您可以进行预处理,使用字符串数组来缓解命令中的空格问题,以下应该可行:

String[] args = {"C:\Program Files\app\app.exe","C:\Data Files\data1.dat"};
Runtime.exec(args);

从那里它取决于能够弄清楚什么是两个命令之间的空格以及什么是路径中的空格。

编辑

如果空格出现在可执行文件的路径中,这将起作用,但不会帮助您处理参数中的空格。

String input = "c:\\program files\\someapp\\someapp.exe -someParam=bar";
int firstSplit = input.indexOf(".exe") + 4; //account for length of ".exe"
String command = input.substring(0,firstSplit);
String args = input.substring(firstSplit).trim(); //trim off extraneous whitespace
String[] argarray = args.split(" ");
String[] cmdargs = new String[argarray.length + 1];
cmdargs[0] = command;
for (int i = 0; i < argarray.length; i++) {
cmdargs[i+1] = argarray[i];
}
Runtime.exec(cmdargs);

请注意,这仍然相当脆弱(并且只适用于 exe,不适用于 bat 或其他任何东西)。如果您需要考虑参数中的空格,则需要对 args 字符串或 argarray 进行更多处理。正确的解决方案是让您的用户(或输入过程)正确区分所有参数。

关于java - 当你不知道是否有空格时使用 Java 的 exec 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4070892/

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