標籤:nbsp echo command 正確答案 str 並且 運行 too 引入
設定本地為延遲擴充。其實也就是:延遲變數,全稱延遲環境變數擴充, 想進階,變數延遲是必過的一關!所以這一部分希望你能認真看。
為了更好的說明問題,我們先引入一個例子。
例1:
?
1234 |
@ 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:
?
12345 |
@ 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 的作用