2012-02-27 131 views
0

我試圖通過JAVA程序執行帶有一些參數的bat文件。參數是全路徑文件名,而這個路徑具有空間的一些文件夾名稱,創建問題,並給了我下面的錯誤如何使用帶參數的文件名(即具有完整路徑的文件名)運行帶有空格的文件夾名稱的bat文件

Error: 'D:\Documents' is not recognized as an internal or external command

代碼如下

String command = "D:\Documents and Settings\ A.bat" + " " D:\Documents and Settings\B.xml 



1. process = Runtime.getRuntime().exec(new String[] {"cmd.exe","/c",command}); 
2. process.waitFor(); 
3. exitValue = process.exitValue(); 
+0

你試過用雙斜槓嗎? String command =「D:\\ Documents and Settings \\ A.bat」+「」D:\\ Documents and Settings \\ B.xml – JackTurky 2012-02-27 14:48:00

+0

*「代碼如下」*最好是僞代碼。無論如何,要回答你的下3(至5)個問題,請閱讀[this](http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html)。 – 2012-02-27 15:17:06

+0

我已經試過這個選項,但沒有運氣 – Abhijeet 2012-02-27 17:05:22

回答

0
String command = "\"D:\Documents and Settings\\" A.bat" + " \"D:\Documents and Settings\B.xml\"" 

逃脫雙引號,讓您可以在字面雙引號,給:

cmd.exe /x "D:\Documents and Settings\" A.bat "D:\Documents and Settings\B.xml" 
+0

我曾經使用過這個,但沒有運氣,得到相同的錯誤 – Abhijeet 2012-02-27 17:09:38

3

您需要亞太經社會e字符串中的\(即加倍他們:D:\\Documents),但那不是問題。你可以嘗試逃離空間Documents\\ and\\ Settings或者你使用exec method爲你做這個。只是不要自己構建命令行。更好地使用ProcessBuilder來啓動流程。

+0

你能告訴我一些細節,直接從程序獲得命令即字符串對象。我想知道怎麼可以我是從processbuilder那裏得到的 – Abhijeet 2012-02-27 17:09:01

0

我正在嘗試做同樣的事情。我一整天都在搜索,但沒有成功。最後,我處理得這樣,我如果涉及到任何使用人的分享吧:

 String command = "A.bat D:\\Documents and Settings\\B.xml"; 
     File commandDir = new File ("D:\\Documents and Settings ");   
     String[] cmdArray = { "cmd.exe", "/c", command }; 


     1. Process process = Runtime.getRuntime().exec(cmdArray, null, cmdArray); 
     2. process.waitFor(); 
     3. exitValue = process.exitValue(); 
0

我花了一段時間,所以在搜索和更廣泛的互聯網和即將發佈此作爲當我遇到這個新的問題,這似乎與我的問題相同...

我想從Java調用Windows批處理文件。批處理文件需要幾個參數,但只有第一個參數是數據文件的路徑,與此問題相關。我一直在嘗試切下的命令行基本上是:

cmd /c c:\path\to\my\batchfile.bat c:\path\to\my\datafile.mdl 

我使用Apache的百科全書Exec的最終委託給Runtime.getRuntime().exec(String[] cmdarray, String[] envp, File dir),「正確」的版本,而不是重載版本採用單個String命令。因此,當它們包含空間時引用這些論據是被照顧的。

現在,批文件的路徑和/或數據文件的路徑都可以有空格。如果或者是批處理文件的路徑數據文件的路徑中有空格,則執行該批處理文件。但是,如果兩個都有空格,則批處理文件的路徑在第一個空格處被截斷。

這必須是(Java或Windows?)錯誤,對不對?我已經調試到create()java.lang.ProcessImpl的本地電話,一切似乎都沒問題。我在JDK1.6上。

相關問題