2015-02-24 251 views
0

我在Windows機器上有一個批處理文件。 同樣的道路上有空間。例如。 C:\的Hello World \ MyFile.bat如何處理Windows批處理文件路徑中的空格?

我試圖通過Java來執行批處理文件:

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

但是,作爲路徑中有空格,它說: 「C:\你好」 是不是一個有效的命令或目錄。

我想這太:

完成命令:cmd /c start /wait "C:/Hello World/MyFile.bat"它打開命令提示符,但不進入該文件夾的Hello World,並且不執行批處理文件

如何處理這情況。 讓我知道是否有任何額外的信息。是必須的。

+0

嘗試使用[的ProcessBuilder(https://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.html) – McDowell 2015-02-24 09:58:34

回答

1

我能夠使用的ProcessBuilder來解決它。 bat文件存在的目錄可以添加到工作目錄中,如下所示:

processBuilder.directory(new File(「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(); 
    } 
1

使用引號("C:\Hello World\MyFile.bat")應該做的伎倆。在Java中,你必須使用\String batch = "\"C:\Hello World\MyFile.bat\"")來引用引號。

+0

我正好想這太。完整的命令:cmd/c start/wait「C:/ Hello World/MyFile.bat」它打開命令提示符,但不進入文件夾Hello World,也不執行bat文件 – vijayinani 2015-02-24 10:09:30

0

你嘗試逃避周圍的路徑引號如:

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

我也試過這個。 完整的命令:cmd/c start/wait「C:/ Hello World/MyFile.bat」 它打開命令提示符,但不進入文件夾Hello World,也不執行bat文件。 – vijayinani 2015-02-24 10:06:48

+0

你必須在文件路徑 – Eric 2015-02-24 10:45:05

+0

中使用雙反斜槓而不是斜槓。不起作用。一樣。打開cmd提示符。但是,不執行批處理。下面給出瞭解決方案。 – vijayinani 2015-02-24 11:14:21

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); 
    }