drs*_*345 0 terminology batch-file
我正在尝试学习MS Batch,并且我特别想了解“ setlocal”和“ enabledelayedexpression”方面,当我遇到词汇时我不明白:
执行时间和解析时间
解析单个行时,解析器具有不同的阶段。
因此,在执行某行(或某块中的任何行)之前,在解析某行或某块时,所有百分比表达式都会展开。
因此,在执行时它们不再更改。
set var=origin
echo #1 %var%
(
set var=new value
echo #2 %var%
)
echo #3 %var%
Run Code Online (Sandbox Code Playgroud)
它输出
#1 origin
#2 origin
#3 new value
Run Code Online (Sandbox Code Playgroud)
与解析时一样,#2将扩展origin为执行该块的任何行之前的时间。因此,您可以在#3的块之后看到新值。
相反,恰好在执行该行之前,为每行扩展了延迟扩展。
setlocal EnableDelayedExpansion
set var=origin
echo #1 %var%, !var!
(
set var=new value
echo #2 %var%, !var!
)
echo #3 %var%, !var!
Run Code Online (Sandbox Code Playgroud)
输出量
#1 origin, origin
#2 origin, new value
#3 new value, new value
Run Code Online (Sandbox Code Playgroud)
现在在#2处,您将看到同一变量的两种不同扩展,因为%var%在解析块时扩展,但在执行!var!该行后扩展set var=new value。
有关批处理解析器的更多详细信息,请参见SO:Windows命令解释器(CMD.EXE)如何解析脚本?