DOS 批处理 setlocal命令、endlocal命令详解

简介: setlocal这是一个命令,它开始局部化环境更改,通常在批处理文件中使用,以确保在脚本中所做的任何环境更改(例如设置或修改环境变量)不会影响到调用此批处理的上下文或其他批处理文件

在 cmd (Windows 命令提示符) 脚本中,@setlocal 是一个常用的组合命令,由两部分组成:@ 和 setlocal。

@:在脚本中,@ 用于阻止命令的显示。通常,在执行批处理文件时,每一行命令都会被显示出来。当你在一行命令前加上 @,这行命令就不会在命令提示符窗口中显示出来。这经常用于使脚本的输出更加干净、整洁。
setlocal:这是一个命令,它开始局部化环境更改。通常在批处理文件中使用,以确保在脚本中所做的任何环境更改(例如设置或修改环境变量)不会影响到调用此批处理的上下文或其他批处理文件。当脚本执行完毕,使用 endlocal 命令可以结束这种局部环境,恢复所有的环境设置到 setlocal 之前的状态。
因此,@setlocal 的组合用途是在批处理文件的开始部分使环境更改局部化,同时不显示这条命令本身。这是编写批处理脚本时的一种常见做法,以确保脚本不会无意中修改全局环境设置。

一、setlocal命令
命令格式

setlocal [ enableExtensions | disableExtensions ] [ enableDelayedExpansion | disableDelayedExpansion ]

命令功能

setlocal 命令用于开始批处理文件中环境变量的本地化。本地化将持续到出现匹配的 endlocal 命令, 或者到达批处理文件结尾为止。

【enableExtensions参数】

启用cmd.exe的命令扩展开特性。extension是“扩大,延伸”的意思

【disableExtensions参数】

关闭cmd.exe的命令扩展特性。

【enableDelayedExpansion参数】

开启cmd.exe的变量延迟展开特性。expansion是“扩展,展开”的意思

【disableDelayedExpansionn参数】

关闭cmd.exe的变量延迟展开特性。

【注意】

enableExtensions参数、disableExtensions参数相比 cmd.exe的 /E参数,它们具有更高的优先级。
enableDelayedExpansion参数、 disableDelayedExpansion参数相比 cmd.exe的 /V参数,它们具有更高的优先级。

二、endlocal命令
命令格式:

endlocal

命令功能:

endlocal 命令用于结束批处理文件中环境变量的本地化。

【“环境变量本地化”的作用】

在批处理文件中实现“环境变量本地化”,可以避免其对外部运行环境的“污染”

示例

demo1.bat的内容如下:

::demo1.bat
@echo off
set var=200
demo2.bat的内容如下:

::demo2.bat
@echo off
setlocal
set var=200
endlocal
运行
C:>set var=5

C:>demo1
C:\out>echo %var%
200

C:>set var=5

C:>demo2
C:>echo %var%
5
C:>

总结
setlocal命令和endlocal命令在批处理文件中有效(在dos命令行环境中无效)
setlocal命令执行以前的所有变量状态(例如:变量值), 在endlocal命令(或者批处理文件)执行完后会被恢复
在setlocal和endlocal(或者批处理文件的结尾处)之间,如果定义了新变量,在执行 endlocal命令后,该变量会被删除(即:其值为空)
在setlocal和endlocal(或者批处理文件的结尾处)之间,可以正常使用setlocal命令执行以前的所有变量(包括外部dos命令行环境定义的变量)
无参的setlocal命令和带参的setlocal命令(例如:setlocal enabledelayedexpansion)都遵守上述规则
无参的setlocal命令只对变量所做的修改进行本地化,不会影响其作用域(setlocal和endlocal(或者批处理文件的结尾处)之间的局域空间)的命令扩展特性和变量延迟展开特性。
编写批处理脚本时,为了不“污染”外部运行环境,同时对自己的运行环境进行“默认设置”,应该在批处理脚本中使用setlocal命令(和endlocal命令),下面是一个比较常用的“批处理脚本模板”

::demo.bat
@echo off
setlocal enableExtensions
:: your code ...
endlocal

相关文章
|
6月前
|
存储 Shell Linux
【Shell 命令集合 磁盘维护 】Linux 创建DOS文件系统 mkdosfs命令使用指南
【Shell 命令集合 磁盘维护 】Linux 创建DOS文件系统 mkdosfs命令使用指南
90 2
|
6月前
|
存储 Linux Shell
【Shell 命令集合 磁盘维护 】Linux 创建MS-DOS文件系统 mkfs.msdos命令使用教程
【Shell 命令集合 磁盘维护 】Linux 创建MS-DOS文件系统 mkfs.msdos命令使用教程
94 0
|
1月前
|
运维
【运维基础知识】用dos批处理批量替换文件中的某个字符串(本地单元测试通过,部分功能有待优化,欢迎指正)
该脚本用于将C盘test目录下所有以t开头的txt文件中的字符串“123”批量替换为“abc”。通过创建批处理文件并运行,可实现自动化文本替换,适合初学者学习批处理脚本的基础操作与逻辑控制。
134 56
|
22天前
|
Java Windows
JAVA 常用的 DOS 命令
【10月更文挑战第15天】DOS 命令是 Java 开发中不可或缺的工具,掌握这些命令可以提高开发效率和操作便利性。
36 3
|
3月前
|
监控 JavaScript 前端开发
JAVA常用的DOS命令
JAVA常用的DOS命令
|
3月前
|
Windows
基本的Dos命令 在控制台如何进入某一个文件或者进入不同的盘符
这篇文章介绍了如何在Windows DOS命令行环境中进入不同盘符和文件夹,包括使用Win+R快捷键打开运行窗口、通过输入盘符加冒号(如"D:")切换到指定盘符、使用"cd"命令进入文件夹,以及一些基本的文件操作命令如"dir"查看文件和"del"删除文件等。
基本的Dos命令 在控制台如何进入某一个文件或者进入不同的盘符
|
3月前
|
关系型数据库 MySQL Java
收藏了许久的(快捷键指定):win系统的dos命令
本文收集了一系列Windows系统中的DOS命令快捷键和实用技巧,包括打开系统属性、运行窗口、文件管理、锁定桌面、查看系统信息、配置系统启动模式、系统服务管理、注册表编辑、共享路径访问、环境变量设置、端口查看、文件操作等,旨在提高用户在使用Windows系统时的效率和便利性。
49 0
|
4月前
DOS常见命令
DOS常见命令
56 13
|
6月前
|
Linux Shell 网络安全
网络安全中Dos和linux常用命令总结
本篇是对网安学习中,常用的命令做一个图文与命令示例,并对一些比较重要的dos和shell命令进行总结,方便自己后续学习进行查询,并希望能够给更多人有一个总结命令和了解命令的地方.
164 5
|
6月前
|
关系型数据库 数据库连接 Windows
windows 常用的dos命令
windows 常用的dos命令
133 0