Directory 命令(批处理)文件-在目录名周围使用引号

Directory 命令(批处理)文件-在目录名周围使用引号,directory,batch-file,quotes,Directory,Batch File,Quotes,我在另一个StackOverflow问题中发现了下面的技术。它获取正确的“Program Files”目录名,无论该文件在32位或64位版本的Windows上运行 我怎样才能避开下面的问题。如果我没有在%programfiles%周围加上双引号,我会在集合中得到一个错误 set BTDFProgFiles=%programfiles(x86)% if %BTDFProgFiles%=="" set BTDFProgFiles=%programfiles% echo BTDFProgFiles=%

我在另一个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显示为两个parm:

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\Microsoft.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:只能指定一个项目。

您应该使用引号,但使用的方式略有不同

set var=“my quoted string”
var设置为
“my quoted string”

设置“var=my quoted string”
var设置为
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"