我有两个非常简单的批处理文件示例:
给变量赋值:
@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命令中的文本。
是什么赋予了?
后续问题:没有setlocal,有什么方法可以启用延迟扩展吗?
如果要从另一个内部调用此简单示例批处理文件,则该示例设置为FOO,但仅是LOCALLY。
例如:
测试调用程序
@call test.bat
@echo FOO: %FOO%
@pause
测试棒
@setlocal EnableDelayedExpansion
@IF NOT DEFINED BAR (
@set FOO=1
@echo FOO: !FOO!
)
显示:
FOO: 1
FOO:
Press any key to continue . . .
在这种情况下,似乎必须在CALLER中启用延迟扩展,这可能很麻烦。
!
,请使用^^^!
(将其转义两次)。否则,“延迟扩展”功能会吃掉它。