批量文件中的变量在IF里面时无法设置?
我有两个非常简单的批处理文件的例子。
给一个变量赋值:
@echo off
set FOO=1
echo FOO: %FOO%
pause
echo on
如我所料,结果是:
FOO: 1
Press any key to continue . . .
然而,如果我把同样的两行放在IF NOT DEFINED块中:
@echo off
IF NOT DEFINED BAR (
set FOO=1
echo FOO: %FOO%
)
pause
echo on
这就意外地导致:
FOO:
Press any key to continue . . .
这和IF没有任何关系, 很明显这个块正在被执行. 如果我在if上面定义了bar,那么就只显示PAUSE命令的文本,正如我所期望的那样:
@call test.bat
@echo FOO: %FOO%
@pause
这是为什么呢?
什么情况?
跟进问题。有什么办法可以在不使用setlocal的情况下启用延迟扩展?
如果我从另一个简单的批处理文件里面调用这个简单的例子,这个例子设置了FOO,但只是局部的。
例如:
testcaller.bat
@setlocal EnableDelayedExpansion
@IF NOT DEFINED BAR (
@set FOO=1
@echo FOO: !FOO!
)
test.bat
FOO: 1
FOO:
Press any key to continue . . .
这样就会显示。
0x1&
在这种情况下,似乎我必须在CALLER中启用延迟扩展,这可能是个麻烦。