我来简要说一下吧:
set:设置
local:本地(环境变量)
enable:能够
delayed:延迟
expansion:扩展
setlocal enabledelayedexpansion就是扩展本地环境变量延迟,
比较下面两段代码:- @echo off
- for /l %%i in (1,1,10) do (
- set "str=%%i"
- echo %str%
- )
- pause>nul
复制代码
- @echo off&setlocal enabledelayedexpansion
- for /l %%i in (1,1,10) do (
- set "str=%%i"
- echo !str!
- )
- pause>nul
复制代码 第一段代码只会显示10行“ECHO 处于关闭状态。”,而第二段
代码则会正确显示1-10的10行数字。这是为什么呢?因为在两
段代码的for循环前str都是没有被定义的,而由于第一段代码没有
开启变量延迟,所以str值一直是没有定义,因而显示出了10行报
错信息;而第二段代码开启了变量延迟,在for循环中每次赋予str
的值被传递下去,因而会正确显示10行数字,但这里的str变量符
必须要写成!str!,这是没有道理可讲的,只要记住就好了。 |