通俗彻底解读批处理的延迟变量
2015-05-29 12:02
218 查看
先说环境变量
一个批处理可以看成是一个程序,它的环境变量就是自己的全局变量。操作系统可以看成是一个大程序,它的环境变量同样也是全局变量,只不过为了和程序的环境变量区别,就叫做全局环境变量了,既然为了区别,那么叫系统环境变量岂不是更好。
再说延迟变量
脚本语言需要解释器解释执行。批处理在解释执行时会以语句为单位读取代码。假如前面有一个变量a=1,这句当中的所有读取a的运算中,比如输出a,a都会先被替换成1,再执行。
还是上代码吧:
![](http://img.blog.csdn.net/20150529122317845?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjc5MDUwMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
说明了:
1. 执行器读取一条语句后会进行变量值替换。如果读取语句的前面还有其他改变这个变量的命令,就会导致读不到最新的值。
2. 写成一行和写成两行是有区别的。
注意:
因为for和if作为一个语句,后面可以跟许多命令,不管跟多少命令,它还是一条命令。
开启延迟变量就是读取变量最新值。
记住这句话就行了,简单明了。它和c/c++中的volatile作用相同。
上代码
![](http://img.blog.csdn.net/20150529123251171?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjc5MDUwMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
注意,设置延迟变量后,变量读取时要用 !变量! 的形式,不用 %变量% ,不然还是读不到最新的值。
一个批处理可以看成是一个程序,它的环境变量就是自己的全局变量。操作系统可以看成是一个大程序,它的环境变量同样也是全局变量,只不过为了和程序的环境变量区别,就叫做全局环境变量了,既然为了区别,那么叫系统环境变量岂不是更好。
再说延迟变量
脚本语言需要解释器解释执行。批处理在解释执行时会以语句为单位读取代码。假如前面有一个变量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输出
注意,设置延迟变量后,变量读取时要用 !变量! 的形式,不用 %变量% ,不然还是读不到最新的值。
相关文章推荐
- Minimum Average Waiting Time
- char*, string, CString, String^的相互转换
- JS匿名函数&闭包
- 数据库基础2 (完整性约束)
- Kafka实战-Kafka Cluster
- JavaScript-对事件作出反应\改变 HTML 内容\改变 HTML 样式\写入HTML输出
- Android studio两种方法添加jar
- Java知识大全
- Lua下基本的网络编程示例
- 二元论的终结
- fragment+scrollview 切换自动滚动解决方法
- Android Studio
- 人脸识别
- Chisel实验笔记(三)
- 第三章 43题
- Struts2配置详解_配置Action之通配符映射
- logback中文乱码问题
- 监听Array数组内容变化
- Java读写Cookie记录的方法
- 深度学习研究理解:Very Deep Convolutional Networks for Large-Scale Image Recognition