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

0

Gostaria de saber se é possível processar uma variável que contenha uma variável não imediatamente, mas apenas quando solicitado. Por exemplo, esse 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 eco ter "Três pessoas" como saída?

    
por phate89 22.07.2014 / 00:04

2 respostas

1

Isso não será possível. Quando uma variável recebe um valor, ela não depende mais da variável ou do texto que foi usado quando atribuída.

A maneira mais fácil de alcançar a saída desejada é simplesmente fazer o eco da variável VA e do texto no final. Basicamente, faça todos os seus cálculos e, no final, monte sua saída.

@echo off
setlocal EnableDelayedExpansion
set VA=Two
set VA=Three
ECHO !VA! people
pause
    
por 22.07.2014 / 00:22
0

Basta definir 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 de 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ê precisar ter o VAR elevado nas condições certas, configure-o 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 batchfile é o mesmo que REM

    
por 22.07.2014 / 02:00