Windows 批處理中 setlocal enabledelayedexpansion 的作用
設置本地為延遲擴展。其實也就是:延遲變量,全稱延遲環境變量擴展, 想進階,變量延遲是必過的一關!所以這一部分希望你能認真看。
為了更好的說明問題,我們先引入一個例子。
例1:
1 2 3 4 |
@ echo off
set a=4
set a=5& echo %a%
pause
|
結果:4
解說:為什麽是4而不是5呢?在echo之前明明已經把變量a的值改成5了?讓我們先了解一下批處理運行命令的機制:批處理讀取命令時是按行讀取的(另外例如for命令等,其後用一對圓括號閉合的所有語句也當作一行),在處理之前要完成必要的預處理工作,這其中就包括對該行命令中的變量賦值。我們現在分析一下例1,批處理在運行到這句“set
a=5&echo
%a%”之前,先把這一句整句讀取並做了預處理——對變量a賦了值,那麽%a%當然就是4了!(沒有為什麽,批處理就是這樣做的。)而為了能夠感知環境變量的動態變化,批處理設計了變量延遲。簡單來說,在讀取了一條完整的語句之後,不立即對該行的變量賦值,而會在某個單條語句執行之前再進行賦值,也就是說“延遲”了對變量的賦值。那麽如何開啟變量延遲呢?變量延遲又需要註意什麽呢?
舉個例子說明一下:
例2:
?1 2 3 4 5 |
@ echo off
setlocal enabledelayedexpansion
set a=4
set a=5& echo !a!
pause
|
結果:5
解說:由於啟動了變量延遲,得到了正確答案。變量延遲的啟動語句是“setlocal
enabledelayedexpansion
”,並且變量要用一對嘆號“!!
”括起來(註意要用英文的嘆號),否則就沒有變量延遲的效果。分析一下例2,首先“setlocal
enabledelayedexpansion”開啟變量延遲,然後“set a=4”先給變量a賦值為4,“set a=5&echo
!a!”這句是給變量a賦值為5並輸出(由於啟動了變量延遲,所以批處理能夠感知到動態變化,即不是先給該行變量賦值,而是在運行過程中給變量賦值,因此此時a的值就是5了)。
Windows 批處理中 setlocal enabledelayedexpansion 的作用