@echo off
SET first=0
FOR %%N IN (hello bye) DO (
SET first=1
echo %first%
echo %%N
)
Parece que la variable "primera" es siempre 0. ¿Por qué?¿Por qué esta variable de proceso por lotes nunca cambia incluso cuando se establece?
@echo off
SET first=0
FOR %%N IN (hello bye) DO (
SET first=1
echo %first%
echo %%N
)
Parece que la variable "primera" es siempre 0. ¿Por qué?¿Por qué esta variable de proceso por lotes nunca cambia incluso cuando se establece?
Con los archivos de proceso por lotes, las variables se expanden cuando se lee su comando, por lo que sería tan pronto como se ejecute for
. En ese punto, ya no dice echo %first%
, literalmente dice echo 0
, porque ese era el valor en el punto de expansión.
Para evitar eso, necesita usar la expansión retardada rodeando su nombre de variable con !
en lugar de %
- por lo que sería echo !first!
. Esto puede requerir que inicie cmd.exe con el parámetro/V o use setlocal enabledelayedexpansion
al principio del archivo por lotes (justo después de echo off
).
Si escribe set /?
, verá una explicación mucho más detallada de esto al final de la salida.
Posible duplicado de [Windows Batch Variables Will Set] (https://stackoverflow.com/questions/9681863/windows-batch-variables-wont-set) –