Gostaria de saber se é possível processar uma variável contendo uma variável não imediatamente, mas somente quando solicitado. Por exemplo este lote:
@echo off
setlocal EnableDelayedExpansion
set VA=Two
set VAR=!VA! people
set VA=Three
ECHO !VAR!
Imprime "Duas pessoas". É possível fazer a análise apenas no final com o echo para ter “Três pessoas” como saída?
Responder1
Isso não será possível. Depois que um valor é atribuído a uma variável, ela não depende mais da variável ou do texto que foi usado quando atribuído.
A maneira mais fácil de obter a saída desejada é simplesmente repetir a variável VA e o texto no final. Basicamente, faça todos os seus cálculos e, no final, reúna sua saída.
@echo off
setlocal EnableDelayedExpansion
set VA=Two
set VA=Three
ECHO !VA! people
pause
Responder2
Basta definir o VAR no final novamente. Não há limitação na frequência com que você pode definir uma variável.
Lembre-se de que um arquivo em lote é apenas uma lista de comandos que você pode digitar no prompt de comando. Cada linha é basicamente um comando por vez executado em ordem cronológica.
Portanto, se você precisa ter o VAR elevado nas condições certas, configure-o um pouco antes desse momento. Exemplo:
@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
:: em um arquivo em lote é igual a REM