@echo off
set ss=abc
echo %ss%
setlocal enabledelayedexpansion
set ss=ppp
echo %ss%
endlocal
echo %ss%
setlocal enabledelayedexpansion
echo !ss!
endlocal
pause
被
setlocal enabledelayedexpansion
endlocal
引起来的部分里所定义的变量相当于局部变量,而在他外面定义则可以理解为全局变量。
在第一个
setlocal enabledelayedexpansionset
ss=ppp
echo %ss%
endlocal
里面对SS进行了重新定义,因此在这个局部环境中,局部变量ss替代了全局变量ss,所以这个地方的echo输出为ppp
而紧接着的
echo %ss%
已经在endlocal外面了,因此他感受不到局部变量ss,只能感受到全局变量ss,因此输出仍然为abc
而在第二个
setlocal enabledelayedexpansion
echo !ss!
endlocal
中,并没有对ss进行重新定义,因为它就从全局变量中取值。局部环境中可以感受全局变量的值,而全局环境中并不能感受局部环境中的变量的值。与C语言是类似的。