Batch file 启用和禁用延迟扩展,它做什么?
我在许多批处理文件中看到过Batch file 启用和禁用延迟扩展,它做什么?,batch-file,Batch File,我在许多批处理文件中看到过SETLOCAL ENABLEDELAYEDEXPANSION&SETLOCAL DISABLEDELAYEDEXPANSION,但是这些命令实际上做什么呢?ENABLEDELAYEDEXPANSION指示cmd识别语法!瓦尔访问var的当前值禁用延迟扩展关闭此功能,因此!瓦尔变成了一个简单的文本字符串 在块语句(一系列带括号的语句)中,解析整个块,然后执行。在解析块时,块内的任何%var%都将替换为该变量的值——在执行块之前——这同样适用于。。。DO(块) 使用!瓦尔
SETLOCAL ENABLEDELAYEDEXPANSION
&SETLOCAL DISABLEDELAYEDEXPANSION
,但是这些命令实际上做什么呢?ENABLEDELAYEDEXPANSION
指示cmd
识别语法!瓦尔代码>访问var
的当前值<代码>禁用延迟扩展
关闭此功能,因此!瓦尔代码>变成了一个简单的文本字符串
在块语句(一系列带括号的语句)
中,解析整个块,然后执行。在解析块时,块内的任何%var%
都将替换为该变量的值——在执行块之前——这同样适用于。。。DO(块)
使用!瓦尔
代替%var%
访问复制自的var
的更改值(如dbenham在其第一条注释中所示)
假设此代码:
If "%getOption%" equ "yes" (
set /P option=Enter option:
echo Option read: %option%
)
前面的代码将不起作用,因为在解析IF命令时(在执行之前),只替换了一次%option%值。您需要“延迟”变量值扩展,直到SET/P命令修改了变量值:
setlocal EnableDelayedExpansion
If "%getOption%" equ "yes" (
set /P option=Enter option:
echo Option read: !option!
)
选中此项:
set var=Before
set var=After & echo Normal: %var% Delayed: !var!
输出为:Normal:Before Delayed:Before Delayed:Before Delayed:Before也请注意,使用SETLOCAL ENABLEDELAYEDEXPANSION
时,您不能回显so:
echo my sentence! 123
将输出为:
我的句子123
通过延迟扩展,您将能够使用FOR命令令牌访问命令参数:
setlocal enableDelayedExpansion
set /a counter=0
for /l %%x in (1, 1, 9) do (
set /a counter=!counter!+1
call echo %%!counter!
)
endlocal
如果要使用for循环解析参数,则此函数非常有用
它有助于通过变量访问变量:
@Echo Off
Setlocal EnableDelayedExpansion
Set _server=frodo
Set _var=_server
Set _result=!%_var%!
Echo %_result%
检查是否定义了带有特殊符号的变量时,可以使用:
setlocal enableDelayedExpansion
set "dv==::"
if defined !dv! (
echo has NOT admin permissions
) else (
echo has admin permissions
)
可能重复的