第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

SETLOCAL和ENABLEDELAYEDEXPANSION如何工作?

SETLOCAL和ENABLEDELAYEDEXPANSION如何工作?

我注意到在大多數(shù)腳本中,這兩個(gè)腳本通常在同一行中:SETLOCAL ENABLEDELAYEDEXPANSION實(shí)際上這兩個(gè)命令是分開的并且可以寫在單獨(dú)的行上嗎?將設(shè)置ENABLEDELAYEDEXPANSION,如果它被設(shè)置在腳本的第一線,直到劇本到底要不要禁止對(duì)腳本產(chǎn)生不利影響?
查看完整描述

3 回答

?
揚(yáng)帆大魚

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊

ENABLEDELAYEDEXPANSION是傳遞給SETLOCAL命令的參數(shù)(請(qǐng)參閱setlocal /?)


它的效果在腳本或以下期間有效ENDLOCAL:


當(dāng)?shù)竭_(dá)批處理腳本的末尾時(shí),將對(duì)該批處理腳本發(fā)出的ENDLOCAL所有未完成SETLOCAL命令執(zhí)行一個(gè)隱式執(zhí)行。


特別是,這意味著,如果SETLOCAL ENABLEDELAYEDEXPANSION在腳本中使用,除非采取特殊措施,否則所有環(huán)境變量更改都會(huì)在腳本末尾丟失。



查看完整回答
反對(duì) 回復(fù) 2019-12-16
?
幕布斯7119047

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊

我認(rèn)為您應(yīng)該了解延遲擴(kuò)展是什么。現(xiàn)有的答案不能(足夠)解釋恕我直言。


鍵入SET /?可以很好地說明問題:


延遲的環(huán)境變量擴(kuò)展對(duì)于避免當(dāng)前擴(kuò)展的局限性很有用,當(dāng)前擴(kuò)展的局限性發(fā)生在讀取一行文本而不是執(zhí)行文本時(shí)。下面的示例演示了立即變量擴(kuò)展的問題:


set VAR=before

if "%VAR%" == "before" (

    set VAR=after

    if "%VAR%" == "after" @echo If you see this, it worked

)

永遠(yuǎn)不會(huì)顯示該消息,因?yàn)樵谧x取第一個(gè)IF語句時(shí),BOTH IF語句中的%VAR%被替換了,因?yàn)樗谶壿嬌习↖F的主體,它是一個(gè)復(fù)合語句。因此,復(fù)合語句中的IF實(shí)際上是將“ before”與“ after”進(jìn)行比較,這將永遠(yuǎn)是不相等的。同樣,以下示例將無法正常工作:


set LIST=

for %i in (*) do set LIST=%LIST% %i

echo %LIST%

因?yàn)樗粫?huì)在當(dāng)前目錄中建立文件列表,而只是將LIST變量設(shè)置為找到的最后一個(gè)文件。同樣,這是因?yàn)樽x取FOR語句時(shí),%LIST%僅被擴(kuò)展了一次,那時(shí)LIST變量為空。因此,我們正在執(zhí)行的實(shí)際FOR循環(huán)為:


for %i in (*) do set LIST= %i

只是將LIST設(shè)置為找到的最后一個(gè)文件。


延遲的環(huán)境變量擴(kuò)展使您可以在執(zhí)行時(shí)使用其他字符(感嘆號(hào))來擴(kuò)展環(huán)境變量。如果啟用了延遲變量擴(kuò)展,則可以按如下所示編寫以上示例以按預(yù)期方式工作:


set VAR=before

if "%VAR%" == "before" (

    set VAR=after

    if "!VAR!" == "after" @echo If you see this, it worked

)


set LIST=

for %i in (*) do set LIST=!LIST! %i

echo %LIST%

另一個(gè)示例是此批處理文件:


@echo off

setlocal enabledelayedexpansion

set b=z1

for %%a in (x1 y1) do (

 set b=%%a

 echo !b:1=2!

)

打印x2和y2:每1被2代替。


沒有setlocal enabledelayedexpansion,感嘆號(hào)就是這樣,它將產(chǎn)生!b:1=2!兩次回聲。


因?yàn)楫?dāng)是(塊)語句正常擴(kuò)展環(huán)境變量的讀取,擴(kuò)大%b:1=2%使用值b循環(huán)之前有:z2(但y2在未設(shè)置)。



查看完整回答
反對(duì) 回復(fù) 2019-12-16
?
搖曳的薔薇

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊

在某些使用延遲擴(kuò)展的程序中,需要ENABLEDELAYEDEXPANSION部分,也就是說,該程序通過在變量IF或FOR命令中通過將其名稱括在感嘆號(hào)中來獲取變量的值。

如果在不需要此擴(kuò)展名的腳本中啟用此擴(kuò)展名,則僅當(dāng)該腳本包含用驚嘆號(hào)!LIKE!括起來的名稱時(shí),該腳本的行為才會(huì)不同。!這些!。通常,名稱只是被擦除,但是如果偶然存在具有相同名稱的變量,則結(jié)果是不可預(yù)測的,并且取決于該變量的值及其出現(xiàn)的位置。

SETLOCAL部分僅在少數(shù)幾個(gè)專門的(遞歸)程序中是必需的,但是當(dāng)您希望確保不偶然修改任何具有相同名稱的現(xiàn)有變量,或者如果您想自動(dòng)刪除在您的程序中使用的所有變量時(shí),通常使用SETLOCAL部分程序。但是,由于沒有單獨(dú)的命令來啟用延遲的擴(kuò)展,因此需要此命令的程序還必須包含SETLOCAL部分。



查看完整回答
反對(duì) 回復(fù) 2019-12-16
  • 3 回答
  • 0 關(guān)注
  • 532 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)