È stato infine aggiunto il supporto per l'espansione ritardata delle variabili di ambiente. Tale supporto è disattivato per ...

È stato infine aggiunto il supporto per l'espansione ritardata delle variabili di ambiente. Tale supporto è disattivato per impostazione predefinita, ma può essere attivato e disattivato utilizzando l'opzione /V del comando CMD.EXE. Digitare CMD /? per ulteriori informazioni.  L'espansione ritardata delle variabili di ambiente consente di ovviare alle limitazioni dell'espansione immediata, che viene effettuata alla lettura di una riga di testo, ma non quando quest'ultima viene eseguita. Il problema dell'espansione immediata è illustrato dall'esempio seguente:      set VAR=prima     if "%%VAR%%" == "prima" (         set VAR=dopo         if "%%VAR%%" == "dopo" @echo Se questo messaggio viene visualizzato,                                      il codice funziona     )  Questa istruzione non visualizza il messaggio perché, in ENTRAMBE le istruzioni IF, la variabile %%VAR%% viene sostituita alla lettura della prima istruzione IF, poiché include logicamente il corpo di IF, che è un'istruzione composta. L'istruzione IF all'interno dell'istruzione composta confronta pertanto i valori "prima" e "dopo", che non sono mai uguali. Anche l'esempio seguente non funziona come previsto:      set LIST=     for %%i in (*) do set LIST=%%LIST%% %%i     echo %%LIST%%  perché NON crea l'elenco dei file della directory corrente, ma imposta semplicemente la variabile LIST sull'ultimo file trovato. Come in precedenza, questo accade perché la variabile %%LIST%% viene espansa solo una volta alla lettura dell'istruzione FOR e, in quel momento, la variabile LIST è vuota. Di fatto viene pertanto eseguito il ciclo FOR seguente:      for %%i in (*) do set LIST= %%i  che continua a impostare LIST sull'ultimo file trovato.  L'espansione ritardata delle variabili di ambiente consente di espandere le variabili di ambiente al momento dell'esecuzione, semplicemente utilizzando un carattere diverso (il punto esclamativo). Se l'espansione ritardata delle variabili di ambiente è attivata, gli esempi precedenti possono essere riscritti come segue, e funzioneranno correttamente:      set VAR=prima     if "%%VAR%%" == "prima" (         set VAR=dopo         if "!VAR!" == "dopo" @echo Se questo messaggio viene visualizzato, il                                    codice funziona     )      set LIST=     for %%i in (*) do set LIST=!LIST! %%i     echo %%LIST%%