Não processar uma variável em uma string imediatamente no script em lote

Não processar uma variável em uma string imediatamente no script em lote

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

informação relacionada