setlocal 本地变量详解
命令 setlocal (开启本地变量) endlocal (结束本地变量)
很多新手不理解这句话是什么意思,在批处理中有什么作用。
其实在批处理中 setlocal 作用很大,配合 endlocal (结束本地变量)
它可以使你的代码更简洁,易读,且不容易出错。
举例:
假设你在批处理的开头部分有这么一句 set var=123
那么在批处理结束以前,变量 var 的值就永远是 123
除非你 运行了 set "var=" 来把它的值清空。或 set var=别的什么 把它的值改变
否则它的值永远是 123
当写某些代码时,需要把变量的值累加,如: set var=%var%567 此时var的值就是 123567
或是 set /a var+=1 (这是当var的值是有效数字时)每运行一次,var的值就会加1
但当某段代码需要重复运行时,我们有时、甚至是经常需要var的值回到原始的值,即:123
你可能会说这还不好办,一句就ok 了 set var=123或set var=
不错,确实是这样,但如果我们需要将一大堆的变量都会回到原始值呢?
比如: var num a b c d e f .........
你难道要
set var=
set num=
set a=
set b=
........
........
这样吗?
有了setlocal 和 endlocal 就不用这么麻烦了。
看代码
@echo off
set var=123
set num=4456
set a=ham
setlocal
set var=abcd
set num=jkl
set a=efg
set max=1234567
::到了这一步,我想不用echo你应该也都知道,这三个变量的值改变了,
::并且还给一个新的变量赋了值 max
::对于不熟悉setlocal 和 endlocal 命令的朋友来说,要想让这
::三个变量回到开始的值,可能就只有回到开头那三句去了,其实不用。
::一句就可以了,看下面的
endlocal
echo %var% %num% %a%
echo %max%
pause
看到区别了吗?
不错,setlocal 和 endlocal 这两句中间的命令给所有的变量赋的值都消失了,
就好像从没有运行过它们一样。
运行 setlocal 以前变量的值是什么 在运行 endlocal 以后,
又回到了什么。如果之前是空值,即:没有赋值
如:例子中的 max 那么 echo %max% 就会显示 ECHO 处于关闭状态
以前 cn-dos 里有位版主(好像就是我们论坛的第三方软件版块的现任版主)曾经很形象的解释过这个问题,
这里借用一下 ,记得不是很清楚了,加一点我自己的描述。
他说:
批处理运行时会开辟一块地方给变量,我们可以把它想像为一块黑板,
你可以在黑板上任意写字,在批处理中这种写字,就是给变量赋值或清空或改变变量的值
如:set var=123 set num= set /a str+=1 set var=%var% %num% 等等之类的。
而 setlocal 命令就是在黑板中又划出一块方块来,你在这之后所写的字就全在这个方块中,
(当然这个方块的容量、大小不会有什么限制,你或者把他理解为在这个黑板上又覆盖了一块同样大小的新的黑板,
更为恰当。当然这个黑板的容量大小应该要减去你在原来那块黑板上所写的内容,这个就不在这里讨论了,
知道个大概就行。)
当运行 endlocal (结束变量)后,相当于把你在原来那块黑板上划的方块擦掉了,连内容一起擦掉了。
又或者说,把这个新的黑板拿走了,你在这个新黑板上写的字也都没有了,回到你面前的又是原来的那块黑板,
当然你以前写在上面的字仍然还在。它不会擦掉你的,也不会自动给你写些新东西上去。
也就是 原来的变量还是原来的值,原来没有赋值的,仍然是空值。不管你在那块新黑板上写过什么,都过去了,
就象什么也没发生过一样。
当新黑板上的内容与老黑板上的内容发生冲突时,则以新黑板上的内容为准,
若老黑板上的内容没与新黑板的内容冲突时,老黑板上的内容在新黑板中仍然有效。
在提一句,新黑板最多只能连续覆盖32块,否则就会提示 “以达到最大递归层”的错误信息。
所谓 “连续覆盖”就是运行了 setlocal 而没有运行 endlocal 的情况。
setlocal 本地变量详解的更多相关文章
- mysql show variables系统变量详解
mysql系统变量详解 mysqld服务器维护两种变量.全局变量影响服务器的全局操作.会话变量影响具体客户端连接相关操作. 服务器启动时,将所有全局变量初始化为默认值.可以在选项文件或命令行中指定的选 ...
- net core体系-web应用程序-4net core2.0大白话带你入门-5asp.net core环境变量详解
asp.net core环境变量详解 环境变量详解 Windows操作系统的环境变量在哪设置应该都知道了. Linux(centos版本)的环境变量在/etc/profile里面进行设置.用户级的 ...
- Maya 常用环境变量详解
Maya 常用环境变量详解 前言: Maya 的环境变量让用户可以很方便的自定义 Maya 的功能. 在 Maya 的 Help 帮助文档中有专门的一个章节< Environment Varia ...
- Shell学习之Bash变量详解(二)
Shell学习之Bash变量详解 目录 Bash变量 Bash变量注意点 用户自定义变量 环境变量 位置参数变量 预定义变量 Bash变量 用户自定义变量:在Bash中由用户定义的变量. 环境变量:这 ...
- asp.net core环境变量详解
环境变量详解 Windows操作系统的环境变量在哪设置应该都知道了. Linux(centos版本)的环境变量在/etc/profile里面进行设置.用户级的环境变量在其它文件里面,不多说了,有兴趣的 ...
- 4、Ubuntu系统环境变量详解
参考:Linux公社Ubuntu系统环境变量详解 UNIX/Linux系统中的环境变量和库文件的使用方法 由于Linux系统严格的权限管理,造成Ubuntu系统有多个环境变量配置文件,因此我们需要了解 ...
- Nginx基础篇(2)- Nginx基本配置文件和变量详解
Nginx基本配置文件和变量详解 1. 基本配置文件 /etc/nginx/nginx.conf # nginx运行的用户 user nginx; # nginx进程数,建议设置为等于CPU总核心数. ...
- 如何查找YUM安装的JAVA_HOME环境变量详解
如何查找YUM安装的JAVA_HOME环境变量详解 更新时间:2017年10月27日 09:44:56 作者:铁锚 我要评论 这篇文章主要给大家介绍了关于如何查找YUM安装的JAVA_HOM ...
- Python变量详解
Python变量详解 目录 Python变量详解 一.变量的定义 二.变量组成的三部分 2.1 变量名 2.1.1 变量名的命名规范 2.1.2 变量名的命名风格 2.2 赋值符号 2.3 变量值 三 ...
随机推荐
- Android LayoutInflater学习
在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById().不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例 ...
- ROS Learning-011 beginner_Tutorials (编程) 编写 ROS 话题版的 Hello World 程序(Python版)
ROS Indigo beginner_Tutorials-10 编写 ROS 话题版的 Hello World 程序(Python版) 我使用的虚拟机软件:VMware Workstation 11 ...
- Ubuntu 添加用户到sudoers
ubuntu上的用户有时候需要用到管理员权限,可以通过修改 /etc/sudoers 文件内容添加用户权限. 操作方式 1. 首先以root进入系统打开文件 sudo vim /etc/sudoers ...
- java中byte是什么类型,和int有什么区别
byte字节型,int是整型,byte是8bit,int是32bit. byte可以转换为int,但int转byte可能会报错,因为精度问题,可能会超过上界.char也可转int,互转int的关系和b ...
- 数据库commit问题
对数据库进行修改后,需要commit!---之前也是忘记commit导致数据库反应不过来.
- C#代码标识符命名规范
总体原则:命名一定要体现其在程序中的作用: Camel命名法:第一个单词的首字母小写,其余每个单词的首字母大写:多用给变量或者字段命名:给字段命名必须以下划线开始: Pascal命名法:每个单词的首字 ...
- linux 进程间通信机制(IPC机制)一总览
1.作用:进程间通信机制(Inter Process Communication,IPC),这些IPC机制的存在使UNIX在进程通信领域手段相当丰富,也使得程序员在开发一个由多个进程协作的任务组成的系 ...
- sqlserver 时间差转换为天时分秒
DECLARE @starttime DATETIME = '2016-12-01' , @endtime DATETIME = '2016-12-02 14:56:39.927'; DECLARE ...
- wampserver2.5 在 Win7 64位下的相关配置备忘
发现运行和配置这个版本和之前的Wampserver有些差异,特此记录 1).wampserver2.5-Apache-2.4.9-Mysql-5.6.17-php5.5.12-64b,另外有可能需要安 ...
- 从零开始搭建.NET Core 2.0 API(学习笔记一)
从零开始搭建.NET Core 2.0 API(学习笔记一) 一. VS 2017 新建一个项目 选择ASP.NET Core Web应用程序,再选择Web API,选择ASP.NET Core 2. ...