Командная строка Windows: без оценки переменной среды

Я хотел бы предоставить необработанный текст, относящийся к переменной среды, команде вместо оценки переменной среды.

Мне это нужно для настройки BizTalk из командной строки, например:

BTTask.exe AddResource -ApplicationName:App1 -Type:System.BizTalk:BizTalkAssembly -Overwrite -Source:..\Schemas\bin\development\App1.Schemas.dll -Destination:%BTAD_InstallDir%\App1.Schemas.dll

Эта команда добавляет ресурс в приложение BizTalk. Я хочу, чтобы пункт назначения был %BTAD_InstallDir%\App1.Schemas.dll, однако в настоящее время он оценивает переменную среды (ни к чему) и использует \App1.Schemas.dll.

Можно ли избежать или отключить оценку этой переменной среды при разборе\выполнении этой команды?

Я попытался экранировать первый и оба процентных символа с помощью морковки (^), однако это не остановило оценку.

[EDIT] Когда я выполняю это в командной строке, переменная окружения не заменяется, однако заменяется, когда я запускаю ее как сценарий. Есть мысли, почему это отличается?


person marcj    schedule 27.11.2008    source источник


Ответы (5)


Ты пробовал:

%%BTAD_InstallDir%%

в вашем сценарии?

Это должно помешать сценарию интерпретировать переменную, и он передаст программе %BTAD_InstallDir%.

person VonC    schedule 27.11.2008
comment
Фантастика, это прекрасно работает. Это работает, потому что он не может разрешить %BTAD_InstallDir% как переменную и поэтому оставляет его исходным значением? - person marcj; 27.11.2008
comment
%% — это пакетный способ не интерпретировать %. Используется для переменной (например, «%%a вместо %a»), поскольку в пакете %1, %2, %3 имеют особое значение. - person VonC; 27.11.2008

Попробуйте выполнить команду echo ^%path^% в командной строке, которая печатает...

дорожка

вместо того, чтобы расширять переменную среды, поэтому я думаю, что следующее должно работать для вас, как это было предложено Майкейджем

BTTask.exe AddResource -ApplicationName:App1 -Type:System.BizTalk:BizTalkAssembly -Overwrite -Source:..\Schemas\bin\development\App1.Schemas.dll -Destination:^%BTAD_InstallDir^%\App1.Schemas.dll

person Autodidact    schedule 27.11.2008
comment
Довольно странно, даже если я не избегаю процентов, это работает, когда я набираю его непосредственно в командной строке, но не когда я запускаю его из сценария .cmd. есть идеи? - person marcj; 27.11.2008

Попробуйте ^% вместо %.

person Mikeage    schedule 27.11.2008
comment
Спасибо за ваш ответ, Майкидж, к сожалению, это все еще оценивает переменную среды. Может быть, мне следует отредактировать свой вопрос, чтобы упомянуть подходы, которые я уже пробовал. - person marcj; 27.11.2008

Пытался:

C:\PrgCmdLine\Unix\echo.exe "%"JAVA_HOME"%"

Есть:

%JAVA_HOME%

[EDIT] Действительно, C:\PrgCmdLine\Unix\echo.exe ^%JAVA_HOME^% тоже работает и проще...

[EDIT 2] Для справки: я использовал эхо UnxUtils, чтобы иметь поведение простой программы. Встроенное эхо имеет немного другое поведение, по крайней мере, для знаков % в кавычках.

person PhiLho    schedule 27.11.2008

Не уверен, что это то же самое, что и мой случай, но мне было сложно использовать пакетный файл для создания скрипта, внутри которого есть переменная% temp%. Обходной путь, который я нашел: set test=%temp; echo {команда} %test%%>>path_to_my_batch_file; Надеюсь, это поможет кому-то :)

person Kristof    schedule 03.03.2020