变量扩展"是什么意思?这是简单的"变量定义"还是别的什么?
当我说setLocal EnableDelayedExpansion
时会发生什么?谷歌并不清楚。
答案 0 :(得分:17)
%
或!
中包含的变量替换为其值。%normal%
扩展具有相同的值如果该行被执行多次(例如在%variable%
命令中),则无关紧要。for
扩展执行该行。见这个例子:
!delayed!
输出:
@echo off
setlocal EnableDelayedExpansion
set "var=Original"
set "var=New" & echo Normal: "%var%", Delayed: "!var!"
另一个:
Normal: "Original", Delayed: "New"
输出:
@echo off
setlocal EnableDelayedExpansion
set "var1=Normal"
set "var2=Delayed"
for /L %%i in (1,1,10) do (
set "var1=%var1% %%i"
set "var2=!var2! %%i"
)
echo Normal: "%var1%"
echo Delayed: "%var2%"
正常扩张不一定是劣势,但取决于它所使用的具体情况。例如,在任何其他编程语言中,要交换两个变量的值,您需要第三个的帮助,但在批处理中,它可以只在一行中完成:
Normal: "Normal 10"
Delayed: "Delayed 1 2 3 4 5 6 7 8 9 10"
答案 1 :(得分:4)
批处理变量通过将它们用百分号括起来进行扩展。
set myVariable=Hello world
echo %myVariable%
这意味着可变扩张。
与其他编程语言相比,批处理并不真正适用于变量
通常它只适用于它们的扩展。
它就像C / C ++的宏扩展一样。
因此,不存在字符串长度函数来获取变量的长度,
但你可以写一个计算文字字符的函数。
setLocal的说明EnableDelayedExpansion
正常的百分比扩张有两个缺点。
扩展发生在解析用括号括起的行或块时,不执行块时。
让我们看一下这个样本
set var=one
set var=two & echo %var%
echo %var%
输出
一个
2
由于echo %var%
将在之前展开,set var=two
将被执行。
这可能会在FOR循环中出现问题。
第二个缺点是批处理解析器将解析变量的扩展结果。
set var=cat^&dog
echo %var%
变种
未知命令“dog”
但是自MS-Dos(1920年左右)开始以来存在百分比扩张。
DelayedExpansion添加了一个新的扩展字符,即感叹号!
。
但是你必须首先将它与setlocal EnableDelayedExpansion
一起使用,这是为了兼容旧程序。
setlocal EnableDelayedExpansion
set var=one
set var=two & echo !var!
set var=cat^&dog
echo !var!
2个
猫&安培;狗
因此,这解决了扩张百分比的两个问题。