2013-08-16 47 views
0

我試圖運行使用JDK7u25的CMD文件,下面的代碼:執行文件夾中包含CMD文件與空間

try { 
      ProcessBuilder pb = new ProcessBuilder(cmd); 
      pb.directory(workingDir); 
      proc = pb.start(); 
     } catch (IOException e) { 
      System.out.println(e.getMessage()); 
      throw e; 
     } 
     // StdOut and Err Stream must be read immediatly even if they are not used 

     // any error message? 
     StreamInlet error = new StreamInlet(proc.getErrorStream(), "ERROR"); 

     // any output? 
     StreamInlet output = new StreamInlet(proc.getInputStream(), "OUTPUT"); 

     // kick them off 
     error.start(); 
     output.start(); 

     if (wait) { 
      try { 
       exitCode = proc.waitFor(); 
      } catch (InterruptedException e) { 
       System.out.println("Waiting for process was interrupted"); 
      } 
      if (addMetaInfo) 
       System.out.println("Return value = " + exitCode); 
     } 

其中cmd=[cmd.exe, /c, C:\My Root\scripts\windows\tools\MyCLI.cmd, -c, C:\Local Disk D\My Tutorial\RegressionTests.xml, -d, 02_RecordViewer_Test, -l"ERROR"]

但它不工作,我得到下面的輸出。

「C:\我的」不被識別爲內部或外部的命令,

運行的程序或批處理文件。

在調用cmd文件之前,我已經通過添加顯式的「CMD.EXE/C」對JDK7U21 issue進行了必要的更改。另外我也使用了JDK7u21問題中提到的ProcessBuilder類。

如果我試圖執行CMD文件被放置在C中,它工作得很好:\ MyRoot即一個文件夾,沒有它的名字空間。

有人可以幫忙嗎?

+0

這是因爲'cmd'需要用引號括起來'路徑 「C:\我的根\腳本\ WINDOWS \工具\ MyCLI.cmd」'和' 「C:\本地磁盤d \我的教程\ RegressionTests.xml」 '通過Windows – dic19

回答

3

你需要用引號括您的路徑,cmd要求:

String[] cmd = {"cmd.exe", "/c", "\"C:\\My Root\\scripts\\windows\\tools\\MyCLI.cmd\"", "-c", "\"C:\\Local Disk D\\My Tutorial\\RegressionTests.xml\"",.....}; 

更新,我們通過聊天討論,這個問題似乎是ProcessBuilder傳遞參數cmd.exe。但是,由於您有完整的可執行文件路徑,實際上根本不需要cmd.exe。所以,命令應該是這樣的:

String[] cmd = {"\"C:\\My Root\\scripts\\windows\\tools\\MyCLI.cmd\"", "-c", "\"C:\\Local Disk D\\My Tutorial\\RegressionTests.xml\"",.....}; 
+0

cmd是一個String []。我提出的cmd值是我從eclipse調試時得到的值。正如你上面提到的,我也嘗試用雙引號括起來。但沒有運氣:( – ParagJ

+0

但你從CMD得到同樣的錯誤?請發表你怎麼了'cmd'控制檯調用相同的命令,並檢查是否正常工作。 – dic19

+0

如果我把它明確地(在引號引起)控制檯可以工作,但同一個命令行不能在java中工作 – ParagJ

0

我會忍不住改變向前斜槓反斜槓,和逃避的空間。

C:/My\ Root/scripts/windows/tools/MyCLI.cmd 
1

我剛剛注意到這個問題已經在JDK7u25中解決了。我剛剛發現它在Release Notes