2012-10-01 77 views
1

我試圖運行的Windows批處理文件包含以下分配:我的批處理腳本報告錯誤,指出「在這個時候意外」

set ANT_HOME="C:/Program Files/apache-ant-1.8.4" 

的違規行爲:

call %ANT_HOME%/bin/ant -f ../config/common.xml start_db 

當我在我運行回聲腳本得到:

call "C:/Program_Files/apache-ant-1.8.4"/bin/ant -f ../config/common.xml start_db 
Files/apache-ant-1.8.4""=="" was unexpected at this time. 

我搬到第二個引號對的結束路徑,之後的螞蟻,但我收到相同的錯誤消息。

+0

我想你的示例輸出中有一個不需要的下劃線 - 'Program_Files'應該讀取'Program Files'。 – dbenham

回答

5

如果螞蟻是一個.exe我會說你的代碼應該工作。但我懷疑螞蟻是一個批處理文件,並且錯誤發生在螞蟻腳本中。

我根據您的錯誤消息得出的結論 - 具體來說是以下部分:""==""。該錯誤消息是批解析錯誤,我看不到您的代碼如何生成這些字符。所以我想螞蟻一定是導致問題的批處理腳本。

我懷疑ant.bat的頂部有@echo off,所以你沒有看到實際發生故障的線路。

無法訪問ant.bat腳本,我無法確切地診斷出故障,我也無法猜測如何解決它。

更新 - 準確發現問題

我發現ant.bat副本在線。

它的代碼中使用以下行:

if "%ANT_HOME%"=="" set ANT_HOME=%DEFAULT_ANT_HOME% 

你ANT_HOME的定義包括封閉的報價,所以該代碼試圖執行

if ""C:/Program Files/apache-ant-1.8.4""=="" set ANT_HOME=%DEFAULT_ANT_HOME% 

的空間沒有報價,而你有你的錯誤。

所有你需要做什麼來解決一切都是從ANT_HOME的定義中刪除引號,然後添加引號到您的呼叫聲明:

set "ANT_HOME=C:/Program Files/apache-ant-1.8.4" 
call "%ANT_HOME%/bin/ant" -f ../config/common.xml start_db 

正向斜槓並不總是可靠的內部文件分隔符視窗。請參閱Why does the cmd.exe shell on Windows fail with paths using a forward-slash ('/'') path separator?

更好地使用反斜線。

set "ANT_HOME=C:\Program Files\apache-ant-1.8.4" 
call "%ANT_HOME%\bin\ant" -f ..\config\common.xml start_db 
+1

太棒了!有效。謝謝dbenham。 –

+0

另外,對於輸出中額外的下劃線感到抱歉。這是來自調試嘗試。我將正斜線恢復爲原來的反斜線,並且在正確的位置引用了引號,包含變量名稱,腳本像冠軍一樣工作。我對我的問題提供了快速而知識廣泛的迴應,給我留下了深刻的印象。再次感謝。 –

2

引號必須完全圍繞文件名。您不能將它們用於部分名稱。試試這個:

set ANT_HOME=C:\Program Files\apache-ant-1.8.4 
call "%ANT_HOME%\bin\ant" -f ../config/common.xml start_db 

哦,我改變了一些你的斜線來反斜槓(DOS不喜歡正斜槓)。我假設您可以在您傳遞的參數中使用/

+0

編輯以評論反斜槓與普通斜槓的使用情況。 – paddy

+1

錯誤 - 您可以在部分名稱周圍使用引號,甚至可以在同一路徑中多次使用引號。引號保護空格和特殊字符,然後被丟棄。試試看吧:-)另外,正斜槓通常也能正常工作,儘管它似乎被竊聽了。 CALL似乎支持基於我剛剛運行的一些快速測試的正斜槓。請參閱[爲什麼Windows上的cmd.exe外殼失敗且路徑使用正斜槓路徑分隔符?](http://stackoverflow.com/a/10526678/1012053),其中涉及不涉及CALL的示例,該示例工作並失敗。 – dbenham

+0

您建議的修改可以解決問題,但不會出於您陳述的原因。看[我的回答](http://stackoverflow.com/a/12666896/1012053)。 – dbenham

相關問題