命令 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 本地变量详解的更多相关文章

  1. mysql show variables系统变量详解

    mysql系统变量详解 mysqld服务器维护两种变量.全局变量影响服务器的全局操作.会话变量影响具体客户端连接相关操作. 服务器启动时,将所有全局变量初始化为默认值.可以在选项文件或命令行中指定的选 ...

  2. net core体系-web应用程序-4net core2.0大白话带你入门-5asp.net core环境变量详解

    asp.net core环境变量详解   环境变量详解 Windows操作系统的环境变量在哪设置应该都知道了. Linux(centos版本)的环境变量在/etc/profile里面进行设置.用户级的 ...

  3. Maya 常用环境变量详解

    Maya 常用环境变量详解 前言: Maya 的环境变量让用户可以很方便的自定义 Maya 的功能. 在 Maya 的 Help 帮助文档中有专门的一个章节< Environment Varia ...

  4. Shell学习之Bash变量详解(二)

    Shell学习之Bash变量详解 目录 Bash变量 Bash变量注意点 用户自定义变量 环境变量 位置参数变量 预定义变量 Bash变量 用户自定义变量:在Bash中由用户定义的变量. 环境变量:这 ...

  5. asp.net core环境变量详解

    环境变量详解 Windows操作系统的环境变量在哪设置应该都知道了. Linux(centos版本)的环境变量在/etc/profile里面进行设置.用户级的环境变量在其它文件里面,不多说了,有兴趣的 ...

  6. 4、Ubuntu系统环境变量详解

    参考:Linux公社Ubuntu系统环境变量详解 UNIX/Linux系统中的环境变量和库文件的使用方法 由于Linux系统严格的权限管理,造成Ubuntu系统有多个环境变量配置文件,因此我们需要了解 ...

  7. Nginx基础篇(2)- Nginx基本配置文件和变量详解

    Nginx基本配置文件和变量详解 1. 基本配置文件 /etc/nginx/nginx.conf # nginx运行的用户 user nginx; # nginx进程数,建议设置为等于CPU总核心数. ...

  8. 如何查找YUM安装的JAVA_HOME环境变量详解

    如何查找YUM安装的JAVA_HOME环境变量详解  更新时间:2017年10月27日 09:44:56   作者:铁锚   我要评论 这篇文章主要给大家介绍了关于如何查找YUM安装的JAVA_HOM ...

  9. Python变量详解

    Python变量详解 目录 Python变量详解 一.变量的定义 二.变量组成的三部分 2.1 变量名 2.1.1 变量名的命名规范 2.1.2 变量名的命名风格 2.2 赋值符号 2.3 变量值 三 ...

随机推荐

  1. 使用/dev/dsp的wav文件播放器源码

    转载于:http://blog.csdn.net/dux003/article/details/5459423 #include #include #include #include #include ...

  2. LINUX 使用DBCA创建ORACLE数据库

  3. R语言输出pdf时,中文乱码处理

    本文转载自:https://blog.csdn.net/hongweigg/article/details/47907555 1.使用基础包,使用函数pdf()输出 在使用pdf()函数时,要输出中文 ...

  4. Luogu 4514 上帝造题的七分钟

    二维差分+树状数组. 定义差分数组$d_{i, j} = a_{i, j} + a_{i - 1, j - 1} - a_{i, j - 1} - a_{i - 1, j}$,有$a_{i, j} = ...

  5. CLRMonitor - 跟踪CLR内部执行过程工具

    CLRMonitor v1.0.1511.13 点击此处下载 软件介绍:这款软件主要用于跟踪CLR内部执行过程,定位当前程序执行的命名空间以及方法名等信息.可以迅速找到被跟踪程序的当前执行方法名.本软 ...

  6. 关于IO流---笔记1

    今日内容介绍1.File2.递归=================================================================================1 I ...

  7. 实现斗地主纸牌游戏---洗牌 发牌 看底牌的具体功能------Map集合存储方法 遍历的应用

    该Demo只是斗地主的游戏的一部分,实现的斗地主的组合牌  洗牌  发牌 看牌的功能,主要应用Map集合进行练习 package cn.lijun import java.util.ArrayList ...

  8. 理解JavaScript普通函数以及箭头函数里使用的this

    this 普通函数的this 普通函数的this是由动态作用域决定,它总指向于它的直接调用者.具体可以分为以下四项: this总是指向它的直接调用者, 例如 obj.func() ,那么func()里 ...

  9. MongoDB 分片2

    mongodb 在windows下面进行分片 mongodb 更新很快,在做分片的时候,查找了不少文章,但是很多已经过时了.现在把我搭建的过程及命令分享给大家.我用的是最新版本windows版3.4. ...

  10. UWP&WP8.1 基础控件——Grid

    Grid是一个面板控件  Grid是UWP和WPF,WP8.1中最重要的一个控件,相当相当重要. 他是一个面板控件,是用来添加其他控件   但是呢 用法确实简单的很. 大概就这个样子. 你用工具箱拖, ...