Не обрабатывать переменную в строке немедленно в пакетном скрипте

Не обрабатывать переменную в строке немедленно в пакетном скрипте

Я хотел бы узнать, возможно ли обрабатывать переменную, содержащую переменную, не сразу, а только по запросу. Например, этот пакет:

 @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

Связанный контент