En fait, vous penseriez que la sortie serait "après", étant donné que nous avons réinitialisé la variable env à l'intérieur de la boucle.
Mais la sortie sera réellement "avant". La raison en est que la substitution de variable est faite dans les fichiers .bat par l'interpréteur quand une commande est lue, plutôt que quand elle est exécutée. Ainsi, pour l'instruction composée, les variables du corps sont évaluées lorsque l'instruction if est rencontrée pour la première fois.
Vous pouvez faire cela en utilisant l'expansion de variable d'environnement retardée (besoin de l'activer). Si elle est activée, vous pouvez alors faire:
set VAR = avant
si "% VAR%" == "avant" (
ensemble VAR = après;
écho VAR!
)
Vous pouvez activer l'expansion variable d'environnement différé en utilisant l'option/v lors du démarrage cmd.exe. [Backstory - beaucoup d'entre nous utilisent encore des fichiers .bat hérités pour conduire des choses comme faire des procédures, etc. Évidemment, il existe de meilleurs outils de script, mais pas toujours une option pour les utiliser. Je me suis heurté à ce problème il y a quelque temps et j'ai récemment trouvé deux autres personnes qui s'étaient arraché les cheveux par-dessus la même chose. Il est donc utile de comprendre comment l'interpréteur fait la substitution de variable].