When a line or a block of code (the code enclosed in parenthesis in your for
, if
, ... ) is reached, the parser removes all variable reads, replacing them with the value inside the variable before the line/block starts to execute. So, if the value of a variable is changed inside a line/block, this changed value is not visible inside that same line/block since all access to the variable content has been replaced with its value.
So, if the value of the variable is changed inside a line/block AND the changed value of the variable needs to be read/accessed inside the same line/block, delayed expansion is needed.
for
and if
commands are places where this is usually more evident, but constructs as
set "data=test"
....
set "data=other test" & echo %data%
shows the same problem. When the parser handles the last line, %data%
is replaced with its value, and then the line is executed. So the final line executed is
set "data=other test" & echo test
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…