setlocal 指令用於在批處理檔中啟動環境變數的區域化(本地化)。區域化效力持續到遇到對應的 endlocal 或批處理檔結束為止,確保腳本內的變數修改不污染全域環境。
setlocal {enableextensions | disableextensions} {enabledelayedexpansion | disabledelayedexpansion}
| 參數 | 功能說明 |
|---|---|
enableextensions | 啟用命令擴展,直到遇到對應的 endlocal,無視腳本前的設定。 |
disableextensions | 禁用命令擴展,直到遇到對應的 endlocal。 |
enabledelayedexpansion | 啟用延遲環境變數擴展(即 !var! 語法),直到遇到對應的 endlocal。 |
disabledelayedexpansion | 禁用延遲環境變數擴展,直到遇到對應的 endlocal。 |
以下腳本示範如何區域化修改 PATH 僅影響當前批處理與呼叫的子程式:
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 in Notepad.
rem *******End Comment*******
@echo off
setlocal
path=g:\programs\superapp;%path%
call superapp>c:\superapp.out
endlocal
start notepad c:\superapp.out
執行流程:
1. setlocal 開啟區域環境。
2. 修改 path 僅在區域內生效。
3. call superapp 繼承區域環境。
4. endlocal 結束區域,原全域 PATH 恢復。
5. 最後用記事本開啟輸出檔。
