国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
[原創(chuàng)]變量延遲詳解(新手推薦) - DOS批處理 & 腳本技術(shù)(批處理室) - 中國(guó)DO...
 [原創(chuàng)]變量延遲詳解(新手推薦)


因工作關(guān)系一直沒(méi)有太多時(shí)間泡在論壇上,每次上本論壇都很匆忙,注冊(cè)幾個(gè)月以來(lái)第一次發(fā)貼(因?yàn)楸救颂?,不敢發(fā)帖),真有點(diǎn)不好意思!希望大家多多支持!
本帖只“照顧”新手,老鳥(niǎo)略過(guò),哈!

以下是偶根據(jù)論壇內(nèi)的帖子得出的結(jié)論,如有錯(cuò)漏敬請(qǐng)指正!
首先要特別感謝willsort老大寫的這帖子,偶是從中得到啟發(fā)的!
http://www.cn-dos.net/forum/viewthread.php?tid=20733

下面在討論過(guò)程中,偶會(huì)插入一些“廢話”,如果你不喜歡看我寫的“廢話”,可以跳過(guò)。它與本文討論的中心完全無(wú)關(guān)!不過(guò)偶還是建議大家看看,哈!

這段可跳過(guò):

同學(xué)們上課啦,第一天來(lái)這里任教,必須先做個(gè)自我介紹。偶叫金城武,啊啊~~~~~~不,不是,一時(shí)口快說(shuō)錯(cuò)了, 偶姓賈,不好意思!由于近日忙于研究“鬼武者”,所以忘了自己的姓氏!什么,說(shuō)我現(xiàn)在才玩鬼武者,哎!沒(méi)辦法啊,偶窮啊,口袋里總是掏不起這幾塊錢買啊。“幾塊錢?”眾人議論紛紛。什么,又說(shuō)我買盜版,啊~~啊~~~這~~這不在本文的討論范圍啊~~~~~說(shuō)完臺(tái)下眾人舉起磚頭……^_^

這是正文不可跳過(guò):

willsort老大上面的帖子,對(duì)于新手來(lái)說(shuō)比較難理解。不過(guò)沒(méi)關(guān)系,我們先分析一個(gè)例子,同樣是引用willsort老大的。本例啟用了變量延遲,是個(gè)正確的例子!
例1:
CODE:  [Copy to clipboard]
@echo off & setlocal EnableDelayedExpansion
for /f  "tokens=* delims=" %%i in ("Hello world.") do (
    set n=%%i
    set n=!n:ld.=t!
    set n=!n:o w= S!
    set n=!n:He=Wi!
    echo !n!
)
pause
將上面代碼保存為.bat雙擊執(zhí)行后會(huì)顯示“Will Sort”字符串,下面將講解每個(gè)語(yǔ)句的意思:
1.@echo off & setlocal EnableDelayedExpansion
關(guān)閉命令回顯,并啟用變量延遲

2.for /f  "tokens=* delims=" %%i in ("Hello world.") do (
for命令及其參數(shù)的使用,請(qǐng)大家在論壇里搜索相關(guān)字眼。限于篇幅問(wèn)題,這里不作討論。如果此時(shí)你不明白它的意思,那么你就當(dāng)它的作用是把字符串“Hello world.”賦值給%%i好了,當(dāng)然這只是權(quán)宜之計(jì),以后一定要學(xué)習(xí)for的使用!

3.set n=%%i
把%%i的值(即Hello world.)賦予給變量n,這個(gè)大家都知道吧

4.set n=!n:ld.=t!
這里要講講set替換字符的功能了。這個(gè)語(yǔ)句的意思是,先獲取變量n的值(此時(shí)n的值是“Hello world.”),然后將字符“t”替換字符“ld.”,然后再將替換后的結(jié)果再次賦值給變量n(此時(shí)n的值變?yōu)?#8220;Hello wort”)。至于set替換字符的編寫格式,大家可以在CMD鍵入“set/?”找到“%PATH:str1=str2%”這段有說(shuō)明

5.set n=!n:o w= S!
意思和上句一樣,只是替換和被替換的內(nèi)容不同。它是將“ S”替換“o w”(注意S前面和w前面都有個(gè)空格),其實(shí)willsort老大是想證明set替換字符是支持句點(diǎn)和空格的(第4句“ld”后面有個(gè).)。此時(shí)n的值為“Hell Sort”

6.set n=!n:He=Wi!
這句不用說(shuō)了吧,執(zhí)行完這句后n的值為“Will Sort”

7.echo !n!
顯示變量n的值

需要注意的是,一旦啟用了變量延遲,就要用!號(hào)把變量括起來(lái),而不能用%號(hào)。

好了,每句的意思已經(jīng)說(shuō)完了,下面要講本帖真正要討論的變量延遲的問(wèn)題。

這里又要引用Will Sort老大的說(shuō)明:當(dāng)CMD讀取for語(yǔ)句時(shí),其后用一對(duì)圓括號(hào)閉合的所有語(yǔ)句將一同讀取,并完成必要的預(yù)處理工作,這其中就包括環(huán)境變量的擴(kuò)展,所以在for中的所有語(yǔ)句執(zhí)行之前,所有的環(huán)境變量都已經(jīng)被替換為for之前所設(shè)定的值,從而成為一個(gè)字符串常量,而不再是變量。

而為了能夠在for語(yǔ)句內(nèi)部感知環(huán)境變量的動(dòng)態(tài)變化,CMD設(shè)計(jì)了延遲的環(huán)境變量擴(kuò)展特性,也就是說(shuō),當(dāng)CMD讀取了一條完整的語(yǔ)句之后,它不會(huì)立即執(zhí)行變量的擴(kuò)展行為,而會(huì)在某個(gè)單條語(yǔ)句執(zhí)行之前再進(jìn)行擴(kuò)展,也就是說(shuō),這個(gè)擴(kuò)展行為被“延遲”了。

總的來(lái)說(shuō)是,在沒(méi)有啟用變量延遲的情況下,凡是在括號(hào)內(nèi)(即do里面)的變量,在執(zhí)行for語(yǔ)句之前,就已經(jīng)被替換成for語(yǔ)句之前其它命令對(duì)該變量所賦予的值。這句話不懂沒(méi)關(guān)系,下面再看一個(gè)例子,看完你就會(huì)明白。
例2:
CODE:  [Copy to clipboard]
@echo off
for /f  "tokens=* delims=" %%i in ("Hello world.") do (
set n=%%i
set n=%n:ld.=t%
set n=%n:o w= S%
    set n=%n:He=Wi%
    echo %n%
)
pause
這和前面的例子差不多,只是所有!號(hào)都換成%號(hào),這是個(gè)錯(cuò)誤的例子。因?yàn)樗鼪](méi)有啟用變量延遲,也沒(méi)有使用!號(hào)把變量括起來(lái)。我們看到它的執(zhí)行結(jié)果是顯示“ECHO 處于關(guān)閉狀態(tài)”。

為什么會(huì)這樣呢?原因是,在沒(méi)有啟用變量延遲的情況下,凡是在括號(hào)內(nèi)(即do里面)的變量,在執(zhí)行for語(yǔ)句之前,就已經(jīng)被替換成for語(yǔ)句之前其它命令對(duì)該變量所賦予的值。
則是說(shuō)在本例中的以下幾句
set n=%%i
set n=%n:ld.=t%
set n=%n:o w= S%
set n=%n:He=Wi%
echo %n%
第一句能正常執(zhí)行并達(dá)到它的目的,因?yàn)樗皇菃渭兊貙?%i的值賦予給變量n,所以沒(méi)有任何問(wèn)題。其它幾句屬這樣情況:早在for語(yǔ)句執(zhí)行前,CMD就急不切待地將這幾句里面的所有變量n一同執(zhí)行替換行為,替換為for之前,其它命令對(duì)n所設(shè)置的值,從而使n變成一個(gè)常量。但在本例中,for語(yǔ)句之前只有@echo off這句,并沒(méi)有其它命令對(duì)n作過(guò)任何賦值行為,所以在for之前,變量n的值為空值。即是說(shuō),set n=%n:ld.=t% 這句里面的變量n,在CMD讀?。ㄗ⒁馐亲x取不是執(zhí)行)完整個(gè)for語(yǔ)句后(這時(shí)還未輪到set執(zhí)行自己的任務(wù)),就立刻被替換為一個(gè)空值,一個(gè)空值里面沒(méi)有任何東西,所以就不存在一字符替換另一字符這種說(shuō)法(沒(méi)有東西怎么替換?)。最終到執(zhí)行set n=%n:ld.=t%語(yǔ)句時(shí),它只是獲取一個(gè)空值,再給變量n賦予空值而已。其它幾句也是一樣原理。

所以,最后echo %n%的時(shí)候變量n還是個(gè)空值,而echo命令沒(méi)有東西可以顯示,就只有顯示“ECHO 處于關(guān)閉狀態(tài)”這句來(lái)說(shuō)明自己的狀態(tài)

通過(guò)這個(gè)例子的說(shuō)明,相信大家已經(jīng)知道變量延遲的作用吧!我們?cè)倩仡^來(lái)看看例1。
啟用變量延遲后,在執(zhí)行
set n=!n:ld.=t!
set n=!n:o w= S!
set n=!n:He=Wi!
echo !n!
這些語(yǔ)句前,它們里面的變量n不會(huì)馬上被CMD替換(啟用延遲后,CMD變得有耐性啦^_^),而未被替換的話,那么n就還是變量,而不是常量。等到執(zhí)行set n=!n:ld.=t!等這幾句時(shí),變量n才被替換。這樣每個(gè)set命令都能感知變量n的任何變化,從而作出正確的替換行為。這就是變量延遲啦!

可跳過(guò):

什么,說(shuō)我講得不好?沒(méi)辦法啊,因?yàn)榕继税?,只知道這些。偶只是淘兩頓飯吃而已,望大家諒解啊,不要再拿磚頭砸偶。。。不然偶就~~~~~~~~~~叫救命!^_^

這是正文不可跳過(guò):

不要以為只有for才要用變量延遲,下面這個(gè)例子同樣需要
例3:這是個(gè)錯(cuò)誤的例子
CODE:  [Copy to clipboard]
@echo off
set mm=girl&echo %mm%
pause
執(zhí)行后依然顯示“ECHO 處于關(guān)閉狀態(tài)”。
原因是沒(méi)有啟用延遲,而且在set mm=girl&echo %mm%語(yǔ)句前沒(méi)有其它命令對(duì)mm進(jìn)行賦值。這時(shí)當(dāng)CMD執(zhí)行set mm=girl&echo %mm%語(yǔ)句前,就已經(jīng)急不切待地把變量mm的值替換了,而又因?yàn)榍懊鏇](méi)給mm賦值,所以mm被替換為空值,變成常量。等到echo命令執(zhí)行時(shí),它其實(shí)是echo一個(gè)不會(huì)變化的常量,本例中即是空值。

有人會(huì)問(wèn),echo前面不是給mm賦值了嗎?
這個(gè)就要關(guān)系到CMD解釋命令的步驟,大家可以參詳本帖開(kāi)頭willsort的帖子。
總的來(lái)說(shuō)是,如果不啟用變量延遲,在本例中,echo是不會(huì)理會(huì)也不會(huì)知道,它前面(指同一行語(yǔ)句)是否有其它命令給mm賦值。它只會(huì)從set mm=girl&echo %mm%這句以上的語(yǔ)句中獲取它所要顯示的變量的內(nèi)容,也就是說(shuō),上一行或上幾行的命令將mm設(shè)置成什么值,echo命令就顯示什么值。
大家這樣做就明白了:
CODE:  [Copy to clipboard]
@echo off
set mm=boy
set mm=girl&echo %mm%
pause
看看顯示什么結(jié)果就知道了!

這樣編寫例3才正確:
CODE:  [Copy to clipboard]
@echo off&setlocal EnableDelayedExpansion
set mm=girl&echo !mm!
pause
開(kāi)啟了變量延遲,變量擴(kuò)展(替換)的行為就推遲到echo命令執(zhí)行時(shí),這時(shí)echo能感知它前面的命令(本例的set)對(duì)變量mm做了什么“壞事”,從而作出正確的判斷并執(zhí)行

好了全篇完了,下課!

突然,門外傳來(lái)幾只“恐龍”的嚎叫聲:把那小子抓回去,膽敢趁著節(jié)日咱們游山玩水的時(shí)候偷走!!
2分鐘后,“恐龍戰(zhàn)隊(duì)”押著這小子來(lái)到一個(gè)美麗壯觀的“城堡”面前,正門上方寫著“XX瘋?cè)嗽?#8221;,哈哈!

愿天下美女?huà)D女節(jié)快樂(lè),一天比一天美(包括在瀏覽本貼的你)!?。?,這里有女同胞嗎??有的請(qǐng)舉手!呵呵!39們也一起感受節(jié)日的氣氛吧!
這帖本來(lái)是想上午發(fā)的,但因工作關(guān)系,到現(xiàn)在才有空,無(wú)奈??!
以上這些“廢話”只是想令大家閱讀這貼時(shí)能增添幾分氣氛,增加大家的閱讀興趣,令大家在學(xué)習(xí)過(guò)程中輕松輕松而已。如有得罪,敬請(qǐng)批評(píng)指正!
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
[批處理]環(huán)境變量延遲擴(kuò)展
DOS批處理高級(jí)教程(三) : 批處理變量和set命令詳解
[50條]不能說(shuō)的秘密
(一)Windows腳本編程
DOS批處理高級(jí)教程精選(八) - 第二天堂
BAT CMD 批處理文件腳本總結(jié)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服