Variabelen in batch bestand worden niet ingesteld in IF?
Ik heb twee voorbeelden van zeer eenvoudige batch-bestanden:
Een waarde aan een variabele toewijzen:
@echo off
set FOO=1
echo FOO: %FOO%
pause
echo on
Wat, zoals verwacht, resulteert in:
FOO: 1
Press any key to continue . . .
Echter, als ik dezelfde twee regels binnen een IF NOT DEFINED blok plaats:
@echo off
IF NOT DEFINED BAR (
set FOO=1
echo FOO: %FOO%
)
pause
echo on
Dit onverwacht resulteert in:
FOO:
Press any key to continue . . .
Dit hoeft niets met de IF te maken te hebben, het blok wordt duidelijk uitgevoerd. Als ik BAR boven de if definieer, wordt alleen de tekst van het PAUZE-commando weergegeven, zoals verwacht.
Wat geeft dat?
- *
Vervolgvraag: Is er een manier om vertraagde uitbreiding zonder setlocal in te schakelen?
Als ik dit eenvoudige voorbeeldbatchbestand vanuit een ander aanroep, stelt het voorbeeld FOO in, maar alleen LOKAAL.
Bijvoorbeeld:
testcaller.bat
@call test.bat
@echo FOO: %FOO%
@pause
test.bat
Dit laat zien:
@setlocal EnableDelayedExpansion
@IF NOT DEFINED BAR (
@set FOO=1
@echo FOO: !FOO!
)
In dit geval lijkt het erop dat ik vertraagde uitbreiding in de CALLER moet inschakelen, wat een gedoe kan zijn.