Есть два распространенных способа для этого
CALL
или DelayedExpansion
setlocal EnableDelayedExpansion
SET a=123
SET b123=some_text_in_it
rem i want next line to output "some_text_in_it"
call echo %%b%a%%%
echo !b%a%!
Вариант CALL
использует тот факт, что вызов будет повторно обрабатывать строку во второй раз, сначалавремя будет расширено только %a%
, а двойное %%
будет уменьшено до одного %
call echo %b123%
И на втором шаге %b123%
будет расширено.
НоCALL
техника медленная и не очень безопасная, поэтому DelayedExpansion следует отдавать предпочтение.
DelayedExpansion работает так, как восклицательные знаки расширяются на более поздней фазе синтаксического анализатора, чем расширение процентов.
Иэто также причина, почему отложенное расширение намного безопаснее.
Редактировать: Метод для массивов, содержащих числа
Если вы работаете с массивами, которые содержат только числа, вы также можете использовать set /a
получить к ним доступ.
Это намного проще, чем FOR
или CALL
, и работает также в блоках.
setlocal EnableDelayedExpansion
set arr[1]=17
set arr[2]=35
set arr[3]=77
(
set idx=2
set /a val=arr[!idx!]
echo !var!
)