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.