Windows 批處理中 setlocal enabledelayedexpansion 的作用

來源:互聯網
上載者:User

標籤: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 的作用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.