2015-02-24 327 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); 
    } 
相关问题