问题是,当首次分析循环时,%var%被替换为变量的值,并且在执行期间不会更改。
这里有一个演示应该使你可以解决您的代码:
@ECHO off&setlocal&CLS
ECHO Demonstrating the use of %%var%% IN a block
ECHO.
SET var=Original value
ECHO Before the block, %%var%%=%var%
FOR %%i IN (1 2 3) DO (
SET var=New value %%i
ECHO loop %%i : %%var%%=%var%
)
ECHO After the block, %%var%%=%var%
ECHO.
ECHO BECAUSE the block is first PARSED, then executed.
ECHO in the parsing process, %%var%% is replaced by its
ECHO value as it stood when the block was parsed - BEFORE execution
ECHO.
ECHO now try using a SETLOCAL ENABLEDELAYEDEXPANSION command first:
ECHO.
SETLOCAL ENABLEDELAYEDEXPANSION
SET var=Original value
ECHO Before the block, %%var%%=%var% and ^^!var^^!=!var!
FOR %%i IN (1 2 3) DO (
SET var=New value %%i
ECHO loop %%i : %%var%%=%var% BUT ^^!var^^!=!var!
)
ECHO After the block, %%var%%=%var% and ^^!var^^!=!var!
ECHO.
编
哦,这么多的插入记号!一个不识字的兔子的天堂。
脱字符(^
)“逃脱”字的特殊含义跟随 - 除了%
由另一%
逃脱这样 - 行
ECHO Before the block, %%var%%=%var%
什么是呼应是“前块“,然后单个%
,文本var
,另一单%
,=
和the value of var
后SETLOCAL ENABLEDELAYEDEXPANSION
第e字符!
成为特殊字符。所以
ECHO Before the block, %%var%%=%var% and ^^!var^^!=!var!
或
ECHO loop %%i : %%var%%=%var% BUT ^^!var^^!=!var!
附加一个单一!
,字符串var
,另一单!
和=
和the run-time value of var
因为在分析时,将^^
由^
替换,然后将所得^!
被解释在执行时间作为文字!
。 !var!
在PARSE时间保持不变,但在执行时替换为值var
。
谢谢!尤其对于教我而不仅仅是修复。顺便说一句:克拉的^^^做什么?那是逃避'!'的方法吗? – BlueChippy
你的意思是'ECHO在块之前,%% var %% =%var%和^^^!var ^^^!=!var!'?还有一个'暂停'结尾? – user2033427
+1,很好的解释,我正要把'尝试使用延迟扩展',然后在我看到你的答案时使用延迟扩展的代码。 – user2033427