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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SETLOCAL和ENABLEDELAYEDEXPANSION如何工作?

SETLOCAL和ENABLEDELAYEDEXPANSION如何工作?

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

3 回答

?
揚帆大魚

TA貢獻1799條經(jīng)驗 獲得超9個贊

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


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


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


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



查看完整回答
反對 回復 2019-12-16
?
幕布斯7119047

TA貢獻1794條經(jīng)驗 獲得超8個贊

我認為您應該了解延遲擴展是什么?,F(xiàn)有的答案不能(足夠)解釋恕我直言。


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


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


set VAR=before

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

    set VAR=after

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

)

永遠不會顯示該消息,因為在讀取第一個IF語句時,BOTH IF語句中的%VAR%被替換了,因為它在邏輯上包括IF的主體,它是一個復合語句。因此,復合語句中的IF實際上是將“ before”與“ after”進行比較,這將永遠是不相等的。同樣,以下示例將無法正常工作:


set LIST=

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

echo %LIST%

因為它不會在當前目錄中建立文件列表,而只是將LIST變量設置為找到的最后一個文件。同樣,這是因為讀取FOR語句時,%LIST%僅被擴展了一次,那時LIST變量為空。因此,我們正在執(zhí)行的實際FOR循環(huán)為:


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

只是將LIST設置為找到的最后一個文件。


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


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%

另一個示例是此批處理文件:


@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,感嘆號就是這樣,它將產(chǎn)生!b:1=2!兩次回聲。


因為當是(塊)語句正常擴展環(huán)境變量的讀取,擴大%b:1=2%使用值b循環(huán)之前有:z2(但y2在未設置)。



查看完整回答
反對 回復 2019-12-16
?
搖曳的薔薇

TA貢獻1793條經(jīng)驗 獲得超6個贊

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

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

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



查看完整回答
反對 回復 2019-12-16
  • 3 回答
  • 0 關注
  • 544 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號