通俗彻底解读批处理的延迟变量

先说环境变量


一个批处理可以看成是一个程序,它的环境变量就是自己的全局变量。操作系统可以看成是一个大程序,它的环境变量同样也是全局变量,只不过为了和程序的环境变量区别,就叫做全局环境变量了,既然为了区别,那么叫系统环境变量岂不是更好。


再说延迟变量


脚本语言需要解释器解释执行。批处理在解释执行时会以语句为单位读取代码。假如前面有一个变量a=1,这句当中的所有读取a的运算中,比如输出a,a都会先被替换成1,再执行。

还是上代码吧:

@echo off
set a=1
set a=2 & echo %a%
echo %a%
pause
输出:


说明了:

1. 执行器读取一条语句后会进行变量值替换。如果读取语句的前面还有其他改变这个变量的命令,就会导致读不到最新的值。

2. 写成一行和写成两行是有区别的。

注意:

因为for和if作为一个语句,后面可以跟许多命令,不管跟多少命令,还是一条命令


延迟变量

光看名字不能顾名思义。那么就换一个说法来描述:

开启延迟变量就是读取变量最新值。

     记住这句话就行了,简单明了。它和c/c++中的volatile作用相同。


上代码

setlocal EnableDelayedExpansion
set a=1
set a=2 & echo !a!
echo %a%
pause
输出



注意,设置延迟变量后,变量读取时要用 !变量! 的形式,不用 %变量% ,不然还是读不到最新的值。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode每日打卡 - 4的幂

不使用循环来今天解题 public boolean isPowerOfFour(int n) {return n > 0 && (n & (n-1)) 0 && n % 31;}首先去做了2的幂这道题,并了解了n&(n-1)的过程,然后思考一下这道题:求二进制中1的个数,理解了n&(n-…

【转】探索c#之Async、Await剖析

阅读目录: 基本介绍基本原理剖析内部实现剖析重点注意的地方总结 基本介绍 Async、Await是net4.x新增的异步编程方式,其目的是为了简化异步程序编写,和之前APM方式简单对比如下。 APM方式,BeginGetRequestStream需要传入回调函数…

时间计算题100道_小学数学专项练习:计算题200道,趁早打印给孩子,期末考试拿100分!...

点击上方「升学的秘诀」关注我们!获取更多教育经验、方法、学习资料等,每天中午12点与您相约!▼说到我们数学学习过程中最重要的是什么?毋庸置疑那就是我们的一个计算能力,计算可以说是贯穿了我们整个数学学习体系&…

幂等性实现 -接口幂等性

接口幂等性 1.什么是幂等性 对于同一笔业务操作,不管调用多少次,得到的结果都是一样的。 也就是方法调用一次和调用多次产生的额外效果是相同的,他就具有幂等性 2.为什么需要幂等性 在系统高并发的环境下,很有可能因为网络&#…

C 怎么读取Cpp文件_python之调用C加速计算(一)

一、前言python语言是目前比较火的语言,很容易上手,对数据处理也比较友好,可以用几行代码就能进行一些简单的数据处理工作。但是对于稍微大型的数值计算,或者一些涉及到大量循环的数值计算python的计算速度有点让人失望。即使是使…

【转】刨根究底字符编码【2.0版】(3):字符编码的由来、演变与ASCII码

为什么需要字符编码 1. 计算机一开始发明出来时是用来解决数字计算问题的,后来人们发现,计算机还可以做更多的事,例如文本处理。 但计算机其实挺“笨”的,它只“认识”010110111000…这样由0和1两个数字组成的二进制数字&#…

JS创建对象的模式介绍

转自http://www.cnblogs.com/asqq/archive/2013/02/01/3194993.html

matplotlib的优点_超详细matplotlib基础介绍!!!

(给Python开发者加星标,提升Python技能)来源:逐梦erhttps://zhumenger.blog.csdn.net/article/details/106530281【导语】:出色的数据可视化,会让你的数据分析等工作锦上添花,让人印(升)象(职)深(加)刻(薪)。matplotli…

【转】WPF PRISM开发入门一( 初始化PRISM WPF程序)

这篇博客将介绍在WPF项目中引入PRISM框架进行开发的一些基础知识。目前最新的PRISM的版本是Prism 6.1.0,可以在Github上获取PRISM的源码。这个系列的博客将选择PRISM 4.1版本来讲解。可以从微软官网上下载到PRISM 4.1相关内容。将下载下来的文件解压开: …

截屏悬浮软件_功能强大,却小巧的录屏软件,不在错过你的王者时刻

看看录屏是一款操作简单。功能强大的录屏软件。他可以设置你录制视频的一个分辨率,帧率以及录制屏幕方向,非常方便,用户将手机摇一摇就可以控制开启和停止录屏,高效录制精彩瞬间,在录制游戏视频的时候也可以做到不掉帧…

公司用的非标普通自动化用单片机还是plc_PLC的介绍

PLC又叫可编程控制器,一开始是替代传统接触器的一个东西。随着人工价格不断的上涨,自动化的设备会越来越普及。自动化不再是大企业才用的起的东西 ,各种多元化小型自动化设备进入了普通小企业甚至家庭作坊。PLC其实是单片机开发出来的一种工业…

比较文本差异的工具_Linux 开发的五大必备工具 | Linux 中国

Linux 已经成为工作、娱乐和个人生活等多个领域的支柱,人们已经越来越离不开它。在 Linux 的帮助下,技术的变革速度超出了人们的想象,Linux 开发的速度也以指数规模增长。因此,越来越多的开发者也不断地加入开源和学习 Linux 开发…

【转】C# 动态对象(dynamic)的用法

说到正确用法,那么首先应该指出一个错误用法: 常有人会拿var这个关键字来和dynamic做比较。实际上,var和dynamic完全是两个概念,根本不应该放在一起做比较。var实际上是编译期抛给我们的“语法糖”,一旦被编译&#x…

关于prototype使用位置问题的讨论

问题贴:http://bbs.csdn.net/topics/390446362 new四部曲: (1)创建一个新的对象,并让函数的 this 指针指向它; (2)将函数的 prototype 对象的所有成员都赋给这个新对象&#xff0c…

@query传参_vue-router中params传参和query传参的区别及处理方法

在 Vue 实例内部,你可以通过 $router 访问路由实例。因此你可以调用 this.$router.push想要导航到不同的 URL,则使用 router.push 方法。这个方法会向 history 栈添加一个新的记录,所以,当用户点击浏览器后退按钮时,则…

JS成员函数声明位置优化

上代码 function A() {this.a function(){}; } a1 new A(); a2 new A(); alert( a1.aa2.a);输出 说明了a1.a,a2.a指向的内存不是同一个,也就是每个对象都有一份自己的函数,只不过一个类的所有实例之间的函数长得是一样的! 所以…

mybatis plus 事务管理器_SpringBoot第七篇:springboot开启声明式事务

springboot开启事务很简单,只需要一个注解Transactional 就可以了。因为在springboot中已经默认对jpa、jdbc、mybatis开启了事事务,引入它们依赖的时候,事物就默认开启。当然,如果你需要用其他的orm,比如beatlsql&…

JS静态变量和静态函数

function A(){this.id "我是AA"} // 在构造函数外定义的都是所有对象共享的 A.id "我是A"; A.sayId function(){alert(A.id);} A.sayId(); 如上,在构造函数外用函数名定义的属性或者方法,可以也只可以通过函数名来访问&…

Spark读取HDFS上的Snappy压缩文件所导致的内存溢出问题 java.lang.OutOfMemoryError: GC overhead limit exceeded

报错java.lang.OutOfMemoryError: GC overhead limit exceeded HDFS上有一些每天增长的文件,使用Snappy压缩,突然某天OOM了 1.原因: 因为snappy不能split切片,也就会导致一个文件将会由一个task来读取,读取后解压,数…