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 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%%