it编程 > 前端脚本 > Dos/bat

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

173人参与 2024-07-05 Dos/bat

在 cmd (windows 命令提示符) 脚本中,@setlocal 是一个常用的组合命令,由两部分组成:@ 和 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%

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

写作不易,如果您觉得对您有用

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

DOS 批处理如何使用变量的延迟扩展(讲解简约版)

07-05

批处理定时删除指定文件夹及子文件夹 bat脚本

07-05

Windows定时删除指定路径下N天前的文件以及文件夹(脚本之家修正版)

07-05

dos批处理命令forfiles使用参数详解

06-10

bat脚本得到前一天的日期的代码

06-10

windows批处理bat脚本获取并且处理当前日期与时间信息

06-10

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论