【问题标题】:Running cmd with spaces from java使用java中的空格运行cmd
【发布时间】:2013-04-25 12:21:00
【问题描述】:

我想通过 java 会话运行命令。该命令包含空格。作为 "C:\With Space\sample.exe" -command_option "C:\Source File\test.c" 如果

C:\WithoutSpace\sample.exe -command_option "C:\Source File\test.c"

如果我们在C:\With Space\sample.exe 中保留引号,则会收到错误消息:“文件名、目录名或卷标语法不正确。”如果我们删除引号,则 exe 不会运行... 请指导。

谢谢,

【问题讨论】:

  • 如果你使用Runtime#exec(),你应该试试ProcessBuilder
  • 你能显示你用来运行命令的代码吗?

标签: java windows command-line


【解决方案1】:

试试这个:

String[] arg = {"cmd","/c","C:/Source File/test.c"};
ProcessBuilder pb = new ProcessBuilder(arg);
Process pr = pb.start();   

另外,您可以使用Runtime.exec(String[]) 版本

例子:

Runtime rt = Runtime.getRuntime();
String[] args = { "cmd", "/c", "C:/Source File/test.c"};
try
{
    Process proc = rt.exec(processCommand);
}

【讨论】:

  • +1 用于使用ProcessBuilder。请注意,代码示例不起作用,因为 \S 不是有效的转义序列 :-)
  • "c:/source file/test.c" 或 "c:\\source file\\test.c"
  • @user93353 c:/源文件/test.c
  • 我不是在问问题——我是说你的原始路径不起作用——你可以在我的评论中使用任何一个路径——两者都应该起作用。
【解决方案2】:

你可以试试这个:

Process process = Runtime.getRuntime().exec("'C:\WithoutSpace\sample.exe' -command_option 'C:\Source File\test.c'");
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));

while ((line = in.readLine()) != null) {
    //line contain command output
}

【讨论】:

    猜你喜欢
    • 2020-06-18
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多