Command (Batch) File - использование кавычек вокруг имен каталогов - PullRequest
3 голосов
/ 05 апреля 2011

Я нашел метод ниже в другой проблеме 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 будут работать, но тогда параметр для программы сборки будет показан с двумя параметрами:

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: можно указать только один проект.

1 Ответ

5 голосов
/ 05 апреля 2011

Вы должны использовать кавычки, но немного по-другому.

set var="my quoted string" устанавливает var в "my quoted string"
set "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"
...