No procesar una variable en una cadena inmediatamente en un script por lotes

No procesar una variable en una cadena inmediatamente en un script por lotes

Me gustaría saber si es posible procesar una variable que contenga una variable no inmediatamente sino solo cuando se me solicite. Por ejemplo este lote:

 @echo off
 setlocal EnableDelayedExpansion
 set VA=Two
 set VAR=!VA! people
 set VA=Three
 ECHO !VAR!

Imprime "Dos personas". ¿Es posible hacer el análisis sólo al final con el eco para tener "Tres personas" como salida?

Respuesta1

Eso no será posible. Una vez que se asigna un valor a una variable, ya no depende de la variable o del texto que se utilizó cuando se asignó.

La forma más sencilla de lograr el resultado deseado es simplemente repetir la variable VA y el texto al final. Básicamente, haga todos sus cálculos y luego, al final, junte su resultado.

@echo off
setlocal EnableDelayedExpansion
set VA=Two
set VA=Three
ECHO !VA! people
pause

Respuesta2

Simplemente vuelva a configurar el VAR al final. No hay limitación en la frecuencia con la que puede configurar una variable.

Recuerde, un archivo por lotes es sólo una lista de comandos que puede escribir en el símbolo del sistema. Cada fila es básicamente un comando ejecutado a la vez en orden cronológico.

Entonces, si necesitas tener el VAR elevado con las condiciones adecuadas, configúralo justo antes de ese momento. Ejemplo:

@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

:: en un archivo por lotes es lo mismo que REM

información relacionada