如何处理Windows批处理文件的路径中的空格?

时间:2015-02-24 09:54:42

标签: java batch-file path

我在Windows机器上有一个批处理文件。 它的路径是在其中有空格。例如。 C:\ Hello World \ MyFile.bat

我正在尝试通过java执行批处理文件:

Runtime.getRuntime().exec(dosCommand + destinationFilePath + batch)

但是,由于路径有空格,因此它表示“C:\ Hello”不是有效的命令或目录。

我也试过了:

完整命令: cmd /c start /wait "C:/Hello World/MyFile.bat" 它会打开命令提示符,但不会转到文件夹Hello World并且不会执行bat文件

我该如何处理这种情况。 如果有任何其他信息,请告诉我。是必需的。

4 个答案:

答案 0 :(得分:1)

使用引号("C:\Hello World\MyFile.bat")应该可以解决问题。在Java中,您必须使用\String batch = "\"C:\Hello World\MyFile.bat\"")来引用引号。

答案 1 :(得分:1)

我能够使用ProcessBuilder解决它。 bat文件所在的目录可以添加到工作目录中:

processBuilder.directory(新文件(“C:\ hello world \”));

这就像宝石一样。

    int result = 1;
    final File batchFile = new File("C:\\hello world\\MyFile.bat");
    final File outputFile = new File(String.format("C:\\hello world\\output_%tY%<tm%<td_%<tH%<tM%<tS.txt", System.currentTimeMillis()));

    final ProcessBuilder processBuilder = new ProcessBuilder(batchFile.getAbsolutePath());
    processBuilder.redirectErrorStream(true);
    processBuilder.redirectOutput(outputFile);
    processBuilder.directory(new File("C:\\hello world\\"));

    try {
        final Process process = processBuilder.start();
        if (process.waitFor() == 0) {
            result = 0;
        }
        System.out.println("Processed finished with status: " + result);
    } catch (IOException | InterruptedException e) {
        e.printStackTrace();
    }

答案 2 :(得分:0)

您是否试图逃避路径周围的引号,例如:

Runtime.getRuntime().exec(dosCommand + "\"" + destinationFilePath + batch + "\"")

答案 3 :(得分:0)

我刚刚使用ProcessBuilder解决了这个问题,但是我给目录提供了一个空格processBuilder.directory并使用bat文件名运行命令。

ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "start", "/wait", "export.bat");

    pb.directory(new File(batDirectoryWithSpace));
    pb.redirectError();

    try {
        Process process = pb.start();
        System.out.println("Exited with " + process.waitFor());
    } 
    catch (IOException | InterruptedException ex) {
        Exceptions.printStackTrace(ex);
    }