la variable 'var' est-elle détruite avant d'afficher sa valeur?Variable locale dans l'instruction DO DO
@echo off
FOR /f "tokens=* delims=" %%G IN ('dir') DO (
set var=%%G
echo %var%
)
la variable 'var' est-elle détruite avant d'afficher sa valeur?Variable locale dans l'instruction DO DO
@echo off
FOR /f "tokens=* delims=" %%G IN ('dir') DO (
set var=%%G
echo %var%
)
Cela ne marchera jamais car la référence à %var%
est résolu lorsque le corps de la boucle est analysée. Vous devez activer l'extension de variable retardée et utiliser à la place !var!
:
@ECHO OFF
SETLOCAL EnableDelayedExpansion
FOR /F "tokens=* delims= " %%G IN ('dir') DO (
SET VAR=%%G
ECHO !VAR!
)
ENDLOCAL
Vous pouvez lire tout cela par type SET /?
à une ligne de commande ;-)
Vous avez besoin d'expansion retardée:
@setlocal enableextensions enabledelayedexpansion
@echo off
FOR /f "tokens=* delims=" %%G IN ('dir') DO (
set var=%%G
echo !var!
)
endlocal
La raison pour laquelle cela ne semble pas fonctionner est que %var%
est évalué au moment où la commande entière est analysée. La commande est entière quatre lignes de l'instruction for
. En utilisant l'expansion retardée, vous reportez l'évaluation de !var!
à lorsque le echo
réel est exécuté, lorsqu'il a été défini correctement.