我见过SETLOCAL ENABLEDELAYEDEXPANSION和SETLOCAL DISABLEDELAYEDEXPANSION许多批处理文件,但什么命令实际上做?
Mag*_*goo 18
enabledelayeexpansion指示cmd识别!var!访问current值的语法var.disabledelayedexpansion关闭此工具,因此!var!简单地将其作为文字字符串.
在块语句中(a parenthesised series of statements),整个块被解析然后执行.%var%块中的任何内容都将被解析块时的变量值替换- 在块执行之前 - 同样的事情适用于a FOR ... DO (block).
使用!var!代替%var%访问更改的值var.
复制自如何在批处理文件中使用 SETLOCAL?(正如 dbenham 在他的第一条评论中指出的那样)。
假设这段代码:
If "%getOption%" equ "yes" (
set /P option=Enter option:
echo Option read: %option%
)
Run Code Online (Sandbox Code Playgroud)
以前的代码将不起作用,因为 %option% 值仅在解析 IF 命令时(在执行之前)被替换一次。您需要“延迟”变量值扩展,直到 SET /P 命令修改了变量值:
setlocal EnableDelayedExpansion
If "%getOption%" equ "yes" (
set /P option=Enter option:
echo Option read: !option!
)
Run Code Online (Sandbox Code Playgroud)
检查这个:
set var=Before
set var=After & echo Normal: %var% Delayed: !var!
Run Code Online (Sandbox Code Playgroud)
输出是: Normal: Before Delayed: After