延迟的环境变量扩展
2015-11-12 19:04
134 查看
要理解什么是“延迟的环境变量扩展”,首先要理解什么是“环境变量扩展”。
cmd在解释我们的命令的时候,首先会读取命令行一条完整的命令,然后对其进行一些命令格式的匹配操作,看你所输的命令格式是否正确。如果我们要在命令中引用一些变量,那么我们需要在变量的两边各加一个%号,使cmd在解释我们的命令的时候能够识别这个变量,例如%name%。当cmd读取我们的命令进行格式匹配的时候,就会发现name这个字符串两边各加了一个%,就不会把它当作普通字符串处理,而是把它当作一个变量处理,变量名就叫做name。然后cmd就会查找这个变量的值,用该值替换掉%name%,最后执行这个替换好的命令。这个替换的过程就叫做环境变量扩展。
对于if、for这样的命令,可以将命令嵌套在括号里,所以一个完整的if命令可能包含多个需要执行的命令,但是cmd在解释这类命令的时候,会把它当作一条完整的命令,从而导致出现一些问题。
示例代码如下如下:
执行结果如下:
![](http://images2015.cnblogs.com/blog/464801/201511/464801-20151112184620978-1604850561.png)
这是因为在命令执行之前,变量便进行了替换,导致嵌套在for命令里的操作没有体现出来。这时候,“延迟的环境变量扩展”的概念被提出来了。“延迟的环境变量扩展”,即每条命令在执行之前,才将变量进行替换,以保证对变量的任何修改都可以实时生效。
我们可以使用“setlocal enabledelayedexpansion”命令来开启延迟的环境变量扩展,启用后,我们使用!name!来进行取值,而不是%name%。
修改后的代码如下:
执行后的结果如下:
cmd在解释我们的命令的时候,首先会读取命令行一条完整的命令,然后对其进行一些命令格式的匹配操作,看你所输的命令格式是否正确。如果我们要在命令中引用一些变量,那么我们需要在变量的两边各加一个%号,使cmd在解释我们的命令的时候能够识别这个变量,例如%name%。当cmd读取我们的命令进行格式匹配的时候,就会发现name这个字符串两边各加了一个%,就不会把它当作普通字符串处理,而是把它当作一个变量处理,变量名就叫做name。然后cmd就会查找这个变量的值,用该值替换掉%name%,最后执行这个替换好的命令。这个替换的过程就叫做环境变量扩展。
对于if、for这样的命令,可以将命令嵌套在括号里,所以一个完整的if命令可能包含多个需要执行的命令,但是cmd在解释这类命令的时候,会把它当作一条完整的命令,从而导致出现一些问题。
示例代码如下如下:
@echo off set /a var = 0 for /l %%m in (1,1,5) do ( set /a var = %%m echo %var% ) pause
执行结果如下:
![](http://images2015.cnblogs.com/blog/464801/201511/464801-20151112184620978-1604850561.png)
这是因为在命令执行之前,变量便进行了替换,导致嵌套在for命令里的操作没有体现出来。这时候,“延迟的环境变量扩展”的概念被提出来了。“延迟的环境变量扩展”,即每条命令在执行之前,才将变量进行替换,以保证对变量的任何修改都可以实时生效。
我们可以使用“setlocal enabledelayedexpansion”命令来开启延迟的环境变量扩展,启用后,我们使用!name!来进行取值,而不是%name%。
修改后的代码如下:
@echo off setlocal enabledelayedexpansion set /a var = 0 for /l %%m in (1,1,5) do ( set /a var = %%m echo !var! ) pause
执行后的结果如下:
![](http://images2015.cnblogs.com/blog/464801/201511/464801-20151112190048525-1739353415.png)
相关文章推荐
- 查看Full GC方法:1,jconsel:2,linux 命令: jstat -gcutil id 4s 10003,linux 命令(前提有.gc日志):c
- 带你飞系列 - 一简单搜索
- 怎么修改字体粗细The valid value range is from -1.0 to 1.0
- UVA 512_Message Decoding
- iOS 实现圆角UITableView(group类型)
- matlab中的图放到viso进行编辑的办法
- fl2440内核移植(一)——最小系统
- 处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
- iOS 学习笔记一【屏幕截图,并显示当前View】
- 1111实验二 作业调度模拟实验
- 统计 acm2008
- myeclipse自动生成hibernate映射文件的过程
- iOS开发之MAC常用快捷键汇总
- HDU1166——敌兵布阵(线段树)
- 盘点双11大赢家,良品铺子把借势营销发挥到极致
- codeforces 593D 树链剖分
- 第七章 课堂例子——如何跟踪异常的传播路径
- 程序和思维
- Save Princess(丑数)
- Android的四个应用层