解析时间与执行时间

时间:2013-06-23 22:24:36

标签: batch-file terminology

我正在尝试学习MS Batch,我特意试图理解“setlocal”和“enabledelayedexpression”方面,当我遇到词汇时我不明白:

  

执行时间解析时间

1 个答案:

答案 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?

的批量解析器的更多详细信息