setlocal
开始对批处理文件中的环境变量进行本地化。 本地化会持续进行,直到出现匹配的 endlocal 命令或达到批处理文件的末尾。
语法
setlocal [enableextensions | disableextensions] [enabledelayedexpansion | disabledelayedexpansion]
参数
参数 | 说明 |
---|---|
enableextensions | 启用命令扩展,直到出现匹配的 endlocal 命令,而不考虑运行 setlocal 命令之前的设置。 |
disableextensions | 禁用命令扩展,直到出现匹配的 endlocal 命令,而不考虑运行 setlocal 命令之前的设置。 |
enabledelayedexpansion | 启用延迟环境变量扩展,直到出现匹配的 endlocal 命令,而不考虑运行 setlocal 命令之前的设置。 |
disabledelayedexpansion | 禁用延迟环境变量扩展,直到出现匹配的 endlocal 命令,而不考虑运行 setlocal 命令之前的设置。 |
/? | 在命令提示符下显示帮助。 |
备注
如果在脚本或批处理文件之外使用 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 变量,因此当你将 verify 命令与无效参数一起使用时,该命令会将 ERRORLEVEL 变量初始化为非零值。 此外,如果将 setlocal 命令与参数 {enableextensions | disableextensions} or {enabledelayedexpansion | disabledelayedexpansion} 一起使用,且该命令没有将 ERRORLEVEL 变量设置为 1,则命令扩展不可用。
示例
若要对批处理文件中的环境变量进行本地化,请遵循以下示例脚本:
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