使用CMD打开包含多个空格的文件时出现问题

3
我将使用Java调用下面的命令。 这是Java的初始化。
String fileName="C:\\temp\\A  a.txt";
String  sCmd = "cmd /c start \"\" \"" + fileName + "\"";

当我打印sCmd时,这就是我得到的结果

 cmd /c start '" 'C:\temp\A   a.txt'

这是我运行命令的方式

 Runtime.getRuntime().exec(sCmd);

文件名包含多个空格,当我从Java运行此命令时,会因为无法识别这些多个空格而出现错误。当没有空格或只有一个空格时,它可以正常工作?如何通过Windows命令处理包含多个空格的文件?

示例Java程序:

   import java.io.File;
import java.io.IOException;

public class A
{
    public static void main(String[] args)
    {
        String fileName = "C:\\temp\\a  dfdfd   f.txt";
        File file = new File(fileName);
        String sCmd = "cmd /c start \"\" \"" + file.getAbsolutePath() + "\"";

        System.out.println("exec cmd=<" + sCmd + ">");
        try
        {
            Runtime.getRuntime().exec(sCmd);
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

当我在Windows端运行Java代码时,出现了错误。

以下是Java的输出结果:

exec cmd=<cmd /c start "" "C:\temp\a  dfdfd   f.txt">

我正在使用Windows XP操作系统,但无法打开文件,尤其是文件名中带有空格的文件。

解决方法:

import java.io.File;
import java.io.IOException;

public class A
{
    public static void main(String[] args)
    {
        // String fileName = "C:\\temp\\a.txt";
        String fileName = "C:\\temp\\a  dfdfd   f.txt";
        File file = new File(fileName);
        String sCmd = "cmd /c start \"\" \"" + file.getAbsolutePath() + "\"";

        System.out.println("exec cmd=<" + sCmd + ">");
        try
        {
            Runtime.getRuntime().exec(sCmd.split(" "));
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

这是一个已知的错误,尝试使用此答案,它适用于所有情况,https://dev59.com/lVnUa4cB1Zd3GeqPYTeC#19102375 - azerafati
2个回答

5

cmd /c start "C:\temp\A a.txt" 命令可以在命令行中运行。 如果通过Java的Runtime.getRuntime().exec(...)调用此命令,则需要使用反斜杠转义上述命令中的双引号。


当我运行命令cmd /c start "C:\temp\A a.txt"时,它会打开命令提示符,技术上应该打开文件。 - Harish
1
那么我猜你正在寻找 cmd /c notepad "C:\temp\A a.txt"(在记事本中打开它;你也可以使用其他应用程序)。 - qwerty
现在从命令提示符中运行是问题所在。上述独立代码的主要问题是,如果您运行它,会出现Windows错误。我猜,就像你所说的那样,错误在于"处理",但我不确定错误在哪里。您有看到任何错误吗? - Harish
1
我终于找到解决方案了:如果将来有人参考这个问题,他们可以使用如上所示的代码。 - Harish

1

我不确定你在做什么,但如果只是 cmd /c start <filename> 那么这里有太多引号。

String  sCmd = "cmd /c start \"\" \"" + fileName + "\"";

应该是这样的

String  sCmd = "cmd /c start \"" + fileName + "\"";

顺便说一下:

这是我打印sCmd时得到的结果

cmd /c start '" 'C:\temp\A   a.txt'

我不明白为什么在你的字符串中没有单引号,但输出中却有单引号!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接