開始在批處理檔中本地化環境變數。 本地化會繼續進行,直到遇到相符的 endlocal 指令或到達批次檔的結尾為止。
Syntax
setlocal [enableextensions | disableextensions] [enabledelayedexpansion | disabledelayedexpansion]
Parameters
| Parameter | Description |
|---|---|
| enableextensions | 啟用指令延伸,直到遇到相符的 endlocal 指令為止,不論執行 setlocal 指令之前的設定為何。 |
| disableextensions | 停用指令延伸,直到遇到相符的 endlocal 指令為止,不論執行 setlocal 指令之前的設定為何。 |
| enabledelayedexpansion | 啟用延遲的環境變數展開,直到遇到相符的 endlocal 指令為止,不論執行 setlocal 指令之前的設定為何。 |
| disabledelayedexpansion | 停用延遲的環境變數擴充,直到遇到相符的 endlocal 指令為止,而不論執行 setlocal 指令之前的設定為何。 |
| /? | 在命令提示字元中顯示說明。 |
Remarks
如果您在指令碼或批次檔外部使用 setlocal ,則不會有任何作用。
當您執行批次檔時,請使用 setlocal 來變更環境變數。 執行 setlocal 之後所做的環境變更是批次檔的本機變更。 Cmd.exe 程式在遇到 endlocal 命令或到達批次檔結尾時,會還原先前的設定。
您可以在批次程式中有多個 setlocal 或 endlocal 指令 (亦即巢狀指令)。
setlocal 指令會設定 ERRORLEVEL 變數。 如果您傳遞 {enableextensions | disableextensions} 或 {enabledelayedexpansion | disabledelayedexpansion},則 ERRORLEVEL 變數會設為 0 (零)。 否則,它會設定為 1。 您可以在批次文稿中使用這項資訊來判斷延伸模組是否可用,如下列範例所示:
verify other 2>nul setlocal enableextensions if errorlevel 1 echo Unable to enable extensions因為 cmd 在停用指令延伸時不會設定 ERRORLEVEL 變數,所以當您搭配無效引數使用 ERRORLEVEL 變數時, verify 指令會起始設定為非零值。 此外,如果您使用 setlocal 指令搭配引數 {enableextensions | disableextensions} 或 {enabledelayedexpansion | disabledelayedexpansion},且未將 ERRORLEVEL 變數設為 1,則無法使用指令延伸。
Examples
若要將批次處理檔中的環境變數本地化,請遵循下列範例腳本:
rem *******Begin Comment**************
rem This program starts the superapp batch program on the network,
rem directs the output to a file, and displays the file
rem in Notepad.
rem *******End Comment**************
@echo off
setlocal
path=g:\programs\superapp;%path%
call superapp>c:\superapp.out
endlocal
start notepad c:\superapp.out