J'ai deux exemples de fichiers batch très simples :
Attribution d'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 IF NOT DEFINED :
@echo off
IF NOT DEFINED BAR (
set FOO=1
echo FOO: %FOO%
)
pause
echo on
Este de façon inattendue résulte en :
FOO:
Press any key to continue . . .
Este ne devrait pas n'ont rien à voir avec l'IF, 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 qui se passe ?
Question de suivi : Existe-t-il un moyen d'activer l'expansion différée sans setlocal ?
Si j'appelle cet exemple simple de fichier batch à partir d'un autre fichier, l'exemple définit FOO, mais seulement LOCALEMENT.
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 affiche :
FOO: 1
FOO:
Press any key to continue . . .
Dans ce cas, il semble que je doive activer l'expansion différée dans le CALLER, ce qui peut être un problème.