2011-04-04 32 views
3

我在下面的另一個StackOverflow問題中發現了該技術。它獲取適當的「Program Files」目錄名稱,無論文件是在32位還是64位版本的Windows上運行。命令(批處理)文件 - 使用目錄名稱周圍的引號

如何解決下面的問題。如果我不在%programfiles%附近放置雙引號,那麼我在該集合上出現錯誤。

set BTDFProgFiles=%programfiles(x86)% 
if %BTDFProgFiles%=="" set BTDFProgFiles=%programfiles% 
echo BTDFProgFiles=%BTDFProgFiles% 
%BTDFMSBuildPath% "%BTDFProgFiles%\FRB.EC.Common\%2\Deployment\FRB.EC.Common.BizTalk.Deployment.btdfproj" etc... 

如果我把雙引號那裏,SET語句的工作,但隨後的parm到構建程序顯示了具有兩個PARMS:

set BTDFProgFiles="%programfiles(x86)%" 
if %BTDFProgFiles%=="" set BTDFProgFiles="%programfiles%" 
echo BTDFProgFiles=%BTDFProgFiles% 
%BTDFMSBuildPath% "%BTDFProgFiles%\FRB.EC.Common\%2\Deployment\FRB.EC.Common.BizTalk.Deployment.btdfproj" etc... 

解釋爲: 「C:\ WINDOWS \微軟.NET \ Framework \ v3.5 \ MSBu ild.exe「」C:\ Program Files「\ FRB.EC.BookTransfer \ 1.1 \ Deployment \ FRB.EC.BookTransf er.BizTalk.Deployment.btdfproj」等。

MSBuild認爲我試圖通過多個項目。; MSBUILD:錯誤MSB1008:只能指定一個項目。

回答

5

您應該使用引號,但以其他方式。

set var="my quoted string"變種"my quoted string"
set "var=my quoted string"變種my quoted string
第二種方法可以不添加引號引號字符串。

爲了以安全的方式回顯字符串而不用引號,您可以使用延遲擴展。

所以你的代碼應改爲

setlocal EnableDelayedExpansion 
set "BTDFProgFiles=%programfiles(x86)%" 
if "%BTDFProgFiles%"=="" set "BTDFProgFiles=%programfiles%" 
echo BTDFProgFiles=!BTDFProgFiles! 
"%BTDFMSBuildPath%" "%BTDFProgFiles%\FRB.EC.Common\%2\Deployment\FRB.EC.Common.BizTalk.Deployment.btdfproj" 
+0

謝謝,完美! – NealWalters 2011-04-04 21:42:55

相關問題