国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 幫助中心 > 正文

批處理中setlocal enabledelayedexpansion的作用詳細整理

2024-07-09 22:41:34
字體:
來源:轉載
供稿:網友

設置本地為延遲擴展。其實也就是:延遲變量,全稱延遲環境變量擴展, 想進階,變量延遲是必過的一關!所以這一部分希望你能認真看。

為了更好的說明問題,我們先引入一個例子。
例1:

@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:

@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了)。再舉一個例子鞏固一下。
例3:

@echo off setlocal enabledelayedexpansion for /l %%i in (1,1,5) do ( set a=%%i echo !a! ) pause

結果:12345

解說:本例開啟了變量延遲并用“!!”將變量擴起來,因此得到我們預期的結果。如果不用變量延遲會出現什么結果呢?結果是這樣的:ECHO 處于關閉狀態。ECHO 處于關閉狀態。ECHO 處于關閉狀態。ECHO 處于關閉狀態。ECHO 處于關閉狀態。即沒有感知到for語句中的動態變化。

batman的說明
我來簡要說一下吧:
set:設置
local:本地(環境變量)
enable:能夠
delayed:延遲
expansion:擴展
setlocal enabledelayedexpansion就是擴展本地環境變量延遲,
比較下面兩段代碼:

@echo off for /l %%i in (1,1,10) do ( set "str=%%i" echo %str% ) pause>nul 
@echo off&setlocal enabledelayedexpansion for /l %%i in (1,1,10) do ( set "str=%%i" echo !str! ) pause>nul 

第一段代碼只會顯示10行“ECHO 處于關閉狀態。”,而第二段代碼則會正確顯示1-10的10行數字。這是為什么呢?因為在兩段代碼的for循環前str都是沒有被定義的,而由于第一段代碼沒有開啟變量延遲,所以str值一直是沒有定義,因而顯示出了10行報
錯信息;而第二段代碼開啟了變量延遲,在for循環中每次賦予str的值被傳遞下去,因而會正確顯示10行數字,但這里的str變量符必須要寫成!str!,這是沒有道理可講的,只要記住就好了。

setlocal enabledelayedexpansion 是什么意思?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 尚志市| 昌都县| 拜泉县| 庄浪县| 嘉祥县| 德安县| 云阳县| 莲花县| 盐池县| 洞口县| 龙南县| 迭部县| 秦皇岛市| 常德市| 青铜峡市| 宁城县| 班玛县| 巩留县| 通海县| 珲春市| 将乐县| 朝阳市| 凌海市| 徐州市| 沁源县| 茶陵县| 东乌珠穆沁旗| 高邮市| 乐平市| 澜沧| 津市市| 利津县| 潮州市| 郁南县| 太康县| 闽侯县| 连山| 绥化市| 达孜县| 衡东县| 浦县|