本帖最后由 hanyeguxing 于 2011-4-25 11:34 编辑
对于:setlocal-endlocal
每运行一次setlocal将当前位置(本地环境变量位置,也就是命令解释器PSP中2C、2D字节所标记的环境段地址)的环境变量复制到临时位置,并将新变量继续写到当前位置,变量就是这么继承的...
运行endlocal运行时就清除当前位置所有变量,并将对应临时位置的变量复制回来。
这样,无论set还是其他命令(setlocal-endlocal除外),读写的都是本地环境变量位置里的变量
.............................................以上个人观点,哪天有人发现错了,记得不要拍砖。。。
测试: | @echo off | | for /l %%a in (0,1,4) do set #%%a=%%a | | setlocal enableDelayedExpansion | | for /l %%a in (5,1,9) do set #%%a=%%a | | set # | | pause | | endlocalCOPY |
注意,内存分析时,批处理停在 pause 这条命令上,即没有执行 endlocal 呢...... |