最近写了些代码,有时需开启变量延迟,但为了避免处理有!号路径或文件时出错,又不能全开,只能选择性的开了又关,关了再开...于是就发现了SetLocal的一些问题...这里讨论一下- @echo off
- set a=ABC
- SetLocal EnableDelayedExpansion
- set a=IJK
- SetLocal DisableDelayedExpansion
- echo %a%
- pause
复制代码 结果为 IJK- @echo off
- set a=ABC
- SetLocal EnableDelayedExpansion
- set a=IJK
- SetLocal DisableDelayedExpansion
- echo %a%
- pause
- SetLocal EnableDelayedExpansion
- set a=OPQ
- SetLocal DisableDelayedExpansion
- echo %a%
- pause
复制代码 结果是 OPQ
但是,- @echo off
- set a=ABC
- SetLocal EnableDelayedExpansion
- set a=IJK
- SetLocal DisableDelayedExpansion
- echo %a%
- pause
- call :A
- echo %a%
- pause
- goto :eof
- :A
- SetLocal EnableDelayedExpansion
- set a=OPQ
- SetLocal DisableDelayedExpansion
复制代码 结果是 IJK
而- @echo off
- set a=ABC
- SetLocal EnableDelayedExpansion
- set a=IJK
- SetLocal DisableDelayedExpansion
- echo %a%
- pause
- call :A
- echo %a%
- pause
- goto :eof
- :A
- ::SetLocal EnableDelayedExpansion
- set a=OPQ
- ::SetLocal DisableDelayedExpansion
复制代码 结果却是 OPQ
而下面- @echo off
- set a=ABC
- SetLocal EnableDelayedExpansion
- set a=IJK
- SetLocal DisableDelayedExpansion
- echo %a%
- pause
- goto :A
- :A
- SetLocal EnableDelayedExpansion
- set a=OPQ
- SetLocal DisableDelayedExpansion
- echo %a%
- pause
复制代码 结果还是 OPQ
所以大概的结论是,call 会让 SetLocal EnableDelayedExpansion 开辟新的变量空间,此时对环境变量来说,相当于SetLocal...而SetLocal DisableDelayedExpansion则相当于endlocal |