Finalmente, se agregó compatibilidad para la expansión de la variable retardada. Esta compatibilidad está siempre deshabilitada ...

Finalmente, se agregó compatibilidad para la expansión de la variable
retrasada. Esta compatibilidad está siempre deshabilitada de forma 
predeterminada, pero puede habilitarse o deshabilitarse a través del
modificador de línea de comandos /V a CMD.EXE. Consulte CMD /?

La expansión de la variable de entorno es útil para tratar con las
limitaciones de la expansión actual, las cuales ocurren cuando una línea
de texto es leída, y no cuando se ejecuta. El siguiente ejemplo demuestra
el problema con la expansión de la variable inmediata:

    set VAR=antes
    if "%%VAR%%" == "antes" (
        set VAR=después
        if "%%VAR%%" == "después" @echo Si esto se puede ver, entonces
                         significa que funcionó
    )

dado que %%VAR%% se sustituye al mismo tiempo en ambas instrucciones IF
cuando se lee la primera instrucción IF, pues incluye lógicamente al cuerpo
del IF, el cual es una instrucción compuesta. De esta manera, IF, dentro de
la instrucción compuesta está realmente comparando "antes" con "después" lo
cuál nunca será igual. De un modo parecido, el siguiente ejemplo no funcionará
como se espera:

    set LIST=
    for %%i in (*) do set LIST=%%LIST%% %%i
    echo %%LIST%%

en esto NO generará una lista de archivos en el directorio actual, pero
en su lugar establecerá la variable LIST en el último archivo encontrado.
De nuevo, esto ocurre porque %%LIST%% es expandido solo una vez cuando la
opción FOR es leída, y en ese momento la variable LIST variable está vacía.
Así el ciclo actual FOR que se está ejecutando es:

    for %%i in (*) do set LIST= %%i

el cual solo mantiene el valor LIST hasta el último archivo encontrado.

La expansión de la variable de entorno retrasada permite usar un
carácter diferente (el signo de exclamación para expandir variables en
tiempo de ejecución.  Si la expansión de la variable retrasada está
habilitada, los ejemplos se pueden escribir de la siguiente manera para
que funcionen como es necesario:

    set VAR=antes
    if "%%VAR%%" == "antes" (
        set VAR=después
        if "!VAR!" == "después" @echo Si esto se puede ver, entonces
                       significa que funcionó
    )

    set LIST=
    for %%i en (*) do set LIST=!LIST! %%i
    echo %%LIST%%
Finalmente, se agregó compatibilidad para la expansión de la variable
retardada. Esta compatibilidad está siempre deshabilitada de forma 
predeterminada, pero puede habilitarse o deshabilitarse a través del
modificador de línea de comandos /V a CMD.EXE. Consulte CMD /?

La expansión de la variable de entorno es útil para tratar con las
limitaciones de la expansión actual, las cuales ocurren cuando una línea
de texto es leída, y no cuando se ejecuta. El siguiente ejemplo demuestra
el problema con la expansión de la variable inmediata:

    set VAR=antes
    if "%%VAR%%" == "antes" (
        set VAR=después
        if "%%VAR%%" == "después" @echo Si esto se puede ver, entonces
                         significa que funcionó
    )

dado que %%VAR%% se sustituye al mismo tiempo en ambas instrucciones IF
cuando se lee la primera instrucción IF, pues incluye lógicamente al cuerpo
del IF, el cual es una instrucción compuesta. De esta manera, IF, dentro de
la instrucción compuesta está realmente comparando "antes" con "después" lo
cuál nunca será igual. De un modo parecido, el siguiente ejemplo no funcionará
como se espera:

    set LIST=
    for %%i in (*) do set LIST=%%LIST%% %%i
    echo %%LIST%%

en esto NO generará una lista de archivos en el directorio actual, pero
en su lugar establecerá la variable LIST en el último archivo encontrado.
De nuevo, esto ocurre porque %%LIST%% es expandido sólo una vez cuando la
opción FOR es leída, y en ese momento la variable LIST variable está vacía.
Así el ciclo actual FOR que se está ejecutando es:

    for %%i in (*) do set LIST= %%i

el cual sólo mantiene el valor LIST hasta el último archivo encontrado.

La expansión de la variable de entorno retardada permite usar un
carácter diferente (el signo de exclamación para expandir variables en
tiempo de ejecución.  Si la expansión de la variable retardada está
habilitada, los ejemplos se pueden escribir de la siguiente manera para
que funcionen como es necesario:

    set VAR=antes
    if "%%VAR%%" == "antes" (
        set VAR=después
        if "!VAR!" == "después" @echo Si esto se puede ver, entonces
                       significa que funcionó
    )

    set LIST=
    for %%i en (*) do set LIST=!LIST! %%i
    echo %%LIST%%
Finalmente, se agregó compatibilidad para la expansión de la variable
retardada. Esta compatibilidad está siempre deshabilitada de forma 
predeterminada, pero puede habilitarse o deshabilitarse a través del
modificador de línea de comandos /V a CMD.EXE. Consulte CMD /?

La expansión de la variable de entorno es útil para tratar con las
limitaciones de la expansión actual, las cuales ocurren cuando una línea
de texto es leída, y no cuando se ejecuta. El siguiente ejemplo demuestra
el problema con la expansión de la variable inmediata:

    set VAR=antes
    if "%%VAR%%" == "antes" (
        set VAR=después
        if "%%VAR%%" == "después" @echo Si esto se puede ver, entonces
                         significa que funcionó
    )

dado que %%VAR%% se sustituye al mismo tiempo en ambas instrucciones IF
cuando se lee la primera instrucción IF, pues incluye lógicamente al cuerpo
del IF, el cual es una instrucción compuesta. De esta manera, IF, dentro de
la instrucción compuesta está realmente comparando "antes" con "después" lo
cuál nunca será igual. De un modo parecido, el siguiente ejemplo no funcionará
como se espera:

    set LIST=
    for %%i in (*) do set LIST=%%LIST%% %%i
    echo %%LIST%%

en esto NO generará una lista de archivos en el directorio actual, pero
en su lugar establecerá la variable LIST en el último archivo encontrado.
De nuevo, esto ocurre porque %%LIST%% es expandido solo una vez cuando la
opción FOR es leída, y en ese momento la variable LIST variable está vacía.
Así el ciclo actual FOR que se está ejecutando es:

    for %%i in (*) do set LIST= %%i

el cual solo mantiene el valor LIST hasta el último archivo encontrado.

La expansión de la variable de entorno retardada permite usar un
carácter diferente (el signo de exclamación para expandir variables en
tiempo de ejecución.  Si la expansión de la variable retardada está
habilitada, los ejemplos se pueden escribir de la siguiente manera para
que funcionen como es necesario:

    set VAR=antes
    if "%%VAR%%" == "antes" (
        set VAR=después
        if "!VAR!" == "después" @echo Si esto se puede ver, entonces
                       significa que funcionó
    )

    set LIST=
    for %%i en (*) do set LIST=!LIST! %%i
    echo %%LIST%%