setlocal

開始在批處理檔中本地化環境變數。 本地化會繼續進行,直到遇到相符的 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 命令或到達批次檔結尾時,會還原先前的設定。

  • 您可以在批次程式中有多個 setlocalendlocal 指令 (亦即巢狀指令)。

  • 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