問題是,當首次分析循環時,%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