Ответ 1
Включение задержки расширения переменной решает проблему, script создает "привет":
setlocal EnableDelayedExpansion
set var1=A
set var2=B
set AB=hi
set newvar=!%var1%%var2%!
echo %newvar%
Я хочу сделать что-то подобное в пакетном script. Пожалуйста, дайте мне знать, если это правильный или возможный способ сделать это или любым другим способом?
set var1=A
set var2=B
set AB=hi
set newvar=%var1%%var2%
echo %newvar%
Это должно привести к значению "hi".
Включение задержки расширения переменной решает проблему, script создает "привет":
setlocal EnableDelayedExpansion
set var1=A
set var2=B
set AB=hi
set newvar=!%var1%%var2%!
echo %newvar%
Вы можете сделать это без setlocal
, из-за команды setlocal
переменная не выдержит endlocal
, потому что она была создана в setlocal
. Таким образом, переменная будет определена правильно.
Для этого используйте этот код:
set var1=A
set var2=B
set AB=hi
call set newvar=%%%var1%%var2%%%
echo %newvar%
Примечание: вы ДОЛЖНЫ использовать call
перед установкой переменной или она не будет работать.
Правильный путь, но его можно немного улучшить с помощью расширенного синтаксиса set.
set "var=xyz"
Устанавливает var для содержимого до последнего кавычки, это гарантирует, что не добавляются "скрытые" пространства.
Ваш код будет выглядеть как
set "var1=A"
set "var2=B"
set "AB=hi"
set "newvar=%var1%%var2%"
echo %newvar% is the concat of var1 and var2
echo !%newvar%! is the indirect content of newvar