我正在尝试学习MS Batch,我特意试图理解“setlocal”和“enabledelayedexpression”方面,当我遇到词汇时我不明白:
执行时间和解析时间
答案 0 :(得分:5)
解析单行时,解析器有不同的阶段 因此,在执行行(或块中的任何行)之前解析行或块时,百分比表达式都会扩展。
所以在执行时他们不能再改变了。
set var=origin
echo #1 %var%
(
set var=new value
echo #2 %var%
)
echo #3 %var%
输出
#1 origin
#2 origin
#3 new value
在解析时,#2将在执行块的任何行之前扩展到origin
。
因此,您可以在#3的块之后看到新值。
相反,在执行该行之前,每行都会延长延迟扩展。
setlocal EnableDelayedExpansion
set var=origin
echo #1 %var%, !var!
(
set var=new value
echo #2 %var%, !var!
)
echo #3 %var%, !var!
输出
#1 origin, origin
#2 origin, new value
#3 new value, new value
现在在#2,您会看到同一个变量的两个不同的扩展,因为在解析块时会扩展%var%,但在执行第!var!
行后会展开set var=new value
。
有关SO: How does the Windows Command Interpreter (CMD.EXE) parse scripts?
的批量解析器的更多详细信息