ex
Code: Select all
setlocal enabledelayedexpansion enableextensions
set name1=1
setlocal disabledelayedexpansion enableextensions
set name2=2
setlocal enabledelayedexpansion enableextensions
set name3=3
endlocal
Code: Select all
setlocal enabledelayedexpansion enableextensions
set name1=1
setlocal disabledelayedexpansion enableextensions
set name2=2
setlocal enabledelayedexpansion enableextensions
set name3=3
endlocal
setlocal enabledelayedexpansion enableextensions
set name1=1
setlocal disabledelayedexpansion enableextensions
set name2=2
setlocal enabledelayedexpansion enableextensions
set name3=3
set name
endlocal
set name
endlocal
set name
Code: Select all
@echo off
setlocal enabledelayedexpansion enableextensions
set name1=1
setlocal disabledelayedexpansion enableextensions
set name2=2
setlocal enabledelayedexpansion enableextensions
set name3=3
echo.
set name
endlocal
echo.
set name
endlocal
echo.
set name
Code: Select all
name1=1
name2=2
name3=3
name1=1
name2=2
name1=1
Yes and it couldn't be any other way, it restores the whole environment including any values which you had overwritten:
Code: Select all
@Echo off
setlocal
set _demo=start
set _demo
setlocal
set _demo=midddle
set _demo
setlocal
set _demo=end
set _demo
endlocal
set _demo
endlocal
set _demo
Code: Select all
_demo=start
_demo=middle
_demo=end
_demo=middle
_demo=start
I start every script with
Code: Select all
@echo off
setlocal
I have encountered this, but...Simon Sheppard wrote: ↑2023-Jul-27, 11:43 am Just as a matter of habit, even for scripts which don't (yet) contain any variables.
If you run a script from a CMD session and it sets variables without using Setlocal, then those variables stick around after the script finishes.
Run a few such scripts and you can have an environment filled with a mish mash of left-over variables, which is just messy.