Les variables du fichier de lots ne sont pas définies lorsqu'elles se trouvent à l'intérieur de la FI ?
J'ai deux exemples de fichiers de lots très simples :
Assigner une valeur à une variable :
@echo off
set FOO=1
echo FOO: %FOO%
pause
echo on
Ce qui, comme prévu, donne
FOO: 1
Press any key to continue . . .
Cependant, si je place les deux mêmes lignes à l'intérieur d'un bloc SI NON DÉFINI :
@echo off
IF NOT DEFINED BAR (
set FOO=1
echo FOO: %FOO%
)
pause
echo on
Ce qui, comme prévu, donne :
Ce qui, comme prévu, donne :
:
FOO:
Press any key to continue . . .
Cela ne devrait pas avoir de rapport avec la FI, il est clair que le bloc est en cours d'exécution. Si je définis BAR au-dessus du if, seul le texte de la commande PAUSE est affiché, comme prévu.
Qu'est-ce que ça donne ?
Question de suivi : Y a-t-il un moyen de permettre une expansion retardée sans setlocal ?
Si je devais appeler ce simple exemple de fichier batch de l'intérieur d'un autre, l'exemple définit FOO, mais seulement LOCAL.
Par exemple :
testcaller.bat
@call test.bat
@echo FOO: %FOO%
@pause
test.bat
@setlocal EnableDelayedExpansion
@IF NOT DEFINED BAR (
@set FOO=1
@echo FOO: !FOO!
)
Cela s'affiche :
FOO: 1
FOO:
Press any key to continue . . .
Dans ce cas, il semble que je doive activer l'expansion retardée dans l'APPEL, ce qui peut être un problème.