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