延遲環境變數擴展

格式為setlocal enabledelayedexpansion,是batch檔案的一個基本命令。

基本介紹

  • 中文名:延遲環境變數擴展
  • 外文名:setlocal enabledelayedexpansion
  • 含義:bat語言的一個基本命令
  • 領域:DOS低級程式語言
這裡的變數擴展對應現在高級程式語言中的變數賦值,batch檔案在解釋的時候,首先會讀取命令行一條完整的命令,然後對其進行一些命令格式的匹配操作,看所輸入的命令格式是不是符合它的要求。對於單句是沒什麼問題,但是像if和for以及&等複合語句時就會出現一些奇怪的現象。
下面舉個例子:
@echo offset x=22set x=33 & echo %x%pause
上面的例子輸出的是22而不是33,理解這個我們需要了解batch解釋器的運行機制,一般來說包括如下三個步驟(針對上面這個程式):
1.讀取一個完整的命令並進行語法檢查。
2.將%變數名%替換成變數內容
3.執行這個命令。
所以,解釋器最終看到的是這樣的程式
@echo offset x=22set x=33echo 22pause
微軟為了解決這個問題於是引入了“延遲環境變數擴展”的機制,這樣就不會出現上面的問題,注意引用變數時需要用!變數名!的形式。
這是上面的程式改寫為:
@echo offsetlocal enabledelayedexpansionset x=22set x=33 & echo !x!pause
這時程式就能夠正常輸出 33 了。
再舉一個for的例子
@echo offset f=22if %f%==22 (    set foo=33    echo %foo%)pause
執行後輸出的值是:
ECHO 處於關閉狀態。
很明顯出錯了,為什麼?原因同上。
現在把上面的程式改寫為
@echo offsetlocal enabledelayedexpansionset f=22if %f%==22 (    set foo=33    echo !foo!)pause
執行後輸出的值是:33
更多的例子可以在這裡找到。CSDN

相關詞條

熱門詞條

聯絡我們