Я хотел бы узнать, возможно ли обрабатывать переменную, содержащую переменную, не сразу, а только по запросу. Например, этот пакет:
@echo off
setlocal EnableDelayedExpansion
set VA=Two
set VAR=!VA! people
set VA=Three
ECHO !VAR!
Выводит "Два человека". Возможно ли сделать разбор только в конце с помощью echo, чтобы получить "Три человека" в качестве вывода?
решение1
Это будет невозможно. После того, как переменной присвоено значение, она больше не зависит от переменной или текста, которые использовались при назначении.
Самый простой способ получить желаемый результат — просто вывести на экран переменную VA и текст в конце. По сути, выполните все вычисления, а затем в конце соберите свой результат.
@echo off
setlocal EnableDelayedExpansion
set VA=Two
set VA=Three
ECHO !VA! people
pause
решение2
Просто установите VAR в конце еще раз. Нет ограничений на то, как часто вы можете устанавливать переменную.
Помните, пакетный файл — это всего лишь список команд, которые вы можете ввести в командной строке. Каждая строка — это по сути одна команда за раз, выполняемая в хронологическом порядке.
Так что если вам нужно повысить VAR при правильных условиях, установите его непосредственно перед этим моментом. Пример:
@echo off
setlocal EnableDelayedExpansion
set VA=Two
set VAR=%VA% people
echo %VAR%
set VA=Three
::We want to update VAR, so lets set it again:
set VAR=%VA% people
echo %VAR%
pause
:: в пакетном файле то же самое, что и REM