Board logo

标题: [简单索引]SET变量、延时变量、各种符号的用法 [打印本页]

作者: redtek     时间: 2006-11-5 08:41    标题: [简单索引]SET变量、延时变量、各种符号的用法

看有的朋友经常为一些变量与符号的用法找来找去,
其实利用论坛的 “搜索” 功能可以检索到数不清的好贴子~:)


下面是一个简单的关于变量、延时变量、赋值、符号、字符替换等常用的贴子索引,方便大家快速查找~:)

----------------------------------------------------------------


[推荐]DOS联盟论坛解答室精华帖索引
http://www.cn-dos.net/forum/viewthread.php?tid=13226&fpage=1


关于变量、符号、字符替换方面的应用的部分索引:
=================================================================================



"set" 你知多少?--------应用实例
http://www.cn-dos.net/forum/view ... 1&highlight=SET


理解变量字符的截取功能
http://www.cn-dos.net/forum/viewthread.php?tid=25746&fpage=1


关于"set & echo"变量替换的延迟
http://www.cn-dos.net/forum/view ... 1&highlight=SET


关于setlocal EnableDelayedExpansion 与 "!"
http://www.cn-dos.net/forum/view ... bledelayedexpansion


什么情况下该使用变量延迟?
http://www.cn-dos.net/forum/viewthread.php?tid=20733


如何来替换文本中的“字符?(也就是引号)
http://www.cn-dos.net/forum/view ... highlight=%E2%80%9C


最强之dos命令 – for(是新手学习FOR语句的好资料)
http://www.cn-dos.net/forum/view ... 1&highlight=for


用for循环进行文本替换
http://www.cn-dos.net/forum/view ... =%E6%9B%BF%E6%8D%A2


文件的文字与字母替换问题
http://www.cn-dos.net/forum/view ... =%E6%9B%BF%E6%8D%A2


对批处理学习过程中遇到的字符的作用的总结
http://www.cn-dos.net/forum/viewthread.php?tid=24289&fpage=1


一般的符号的作用
http://www.cn-dos.net/forum/viewthread.php?tid=20558&fpage=4

关于截取变量中字符串的问题 -- 详见此贴的『第 10 楼』举例内容
http://www.cn-dos.net/forum/view ... 4485&sid=ful3YN


批处理参数问题一点谈
http://www.cn-dos.net/forum/viewthread.php?tid=17785


:::::::::::::::::::::::::::::::::::::::::::::: 2006/11/15 修改新增内容::::::::::::::::::::::::::::::::::


以下内容是 willsort 对关于环境变量延迟扩展的知识点给出的详细的说明:
      关于环境变量延迟扩展,使用set /?可以查看到部分说明,不过考虑到其粗劣的翻译水平,建议在查看之前,首先chcp 437切换为英文查看原英文说明。鉴于文中已说得十分详尽,而且有数个代码示例,应该不难理解。在此仅略作一些补充。

      在许多可见的官方文档中,均将使用一对百分号闭合环境变量以完成对其值的替换行为称之为“扩展(expansion)”,这其实是一个第一方的概念,是从命令解释器的角度进行称谓的,而从我们使用者的角度来看,则可以将它看作是引用(Reference)、调用(Call)或者获取(Get)。

      而命令解释器是扩展环境变量的行为大致如下:首先读取命令行的一条完整语句,在进行一些先期的预处理之后,命令被解释执行之前,会对其中用百分号闭合的字符串进行匹配,如果在环境空间中找到了与字符串相匹配的环境变量,则用其值替换掉原字符串及百分号本身,如果未得到匹配,则用一个空串替换,这个过程就是环境变量的“扩展”,它仍然属于命令行的预处理范畴。

      而一条“完整的语句”,在NT的命令解释器CMD中被解释为“for if else”等含有语句块的语句和用“& | && ||”等连接起来的复合语句。

      因此,当CMD读取for语句时,其后用一对圆扩号闭合的所有语句将一同读取,并完成必要的预处理工作,这其中就包括环境变量的扩展,所以在for中的所有语句执行之前,所有的环境变量都已经被替换为for之前所设定的值,从而成为一个字符串常量,而不再是变量。无论在for中将那些环境变量如何修改,真正受到影响的只是环境变量空间,而非for语句内部。
      
      而为了能够在for语句内部感知环境变量的动态变化,CMD设计了延迟的环境变量扩展特性,也就是说,当CMD读取了一条完整的语句之后,它不会立即执行变量的扩展行为,而会在某个单条语句执行之前再进行扩展,也就是说,这个扩展行为被“延迟”了。

      延迟环境变量扩展特性在CMD中缺省是关闭的,开启它的方法目前有两个:一是CMD /v:off,它会打开一个新的命令行外壳,在使用exit退出这个外壳之前,扩展特性始终有效,常用于命令行环境中;二是setlocal EnableDelayedExpansion,它会使环境变量的修改限制到局部空间中,在endlocal之后,扩展特性和之前对环境变量的修改将一同消失,常用于批处理语句中。
[ Last edited by redtek on 2006-12-16 at 06:44 PM ]
作者: electronixtar     时间: 2006-11-6 02:29
顶了
作者: flying008     时间: 2006-11-6 02:55
呵呵……这就是传说中的精华啊……
作者: ljs3509     时间: 2006-11-6 04:35
辛苦了!谢谢
作者: zerostudy     时间: 2006-11-6 06:04
谢谢了.
作者: vkill     时间: 2006-11-6 07:08
这些都是很有用的哦
作者: online365     时间: 2006-11-6 18:28
我还没看呢...
只是看了留了言的都叫好,先顶下吧..

先谢谢了
作者: xhz2006     时间: 2006-11-6 20:18
谢谢楼主,好好学习!!!
作者: yangzhiyi     时间: 2006-11-8 03:47
整理得好,有时间再慢慢看。
作者: honhaizh     时间: 2006-11-16 20:27
收藏
作者: yuanzijia08     时间: 2006-11-18 01:13
谢谢,应该要成为精华贴,方便了我们
作者: hxuan999     时间: 2006-11-23 02:51
收藏,谢谢了
作者: zgren1979     时间: 2006-11-23 22:53
多谢了..很妥帖...
作者: jzl168     时间: 2006-12-17 03:56
做个记号,好学习
作者: jmz573515     时间: 2006-12-25 22:19
以后学习.
作者: scriptor     时间: 2007-1-13 11:07
en \
thank you
作者: wxjlotus     时间: 2007-1-15 11:32
好,顶起!!
作者: zfb     时间: 2007-1-16 05:40
确是传说中的"精华"
作者: zzs162     时间: 2007-2-18 19:59
收藏
作者: zzs162     时间: 2007-2-18 20:00
收咯
作者: star8289     时间: 2007-3-23 04:16
收益,谢谢
作者: axi     时间: 2007-3-24 00:02
添加进入收藏夹。顶一下,希望更多新手知道。
作者: minmin888     时间: 2007-4-20 08:47
学习中,谢谢班主!
作者: minmin888     时间: 2007-4-20 08:48
多谢班主
作者: tongwandou     时间: 2007-4-22 05:57
楼主辛苦了,谢谢你!
作者: ydyxy1234     时间: 2007-5-26 21:05
不错!@!!谢谢啦!!
作者: tyh     时间: 2007-6-7 13:39
哎,我来晚了。
作者: 000012     时间: 2007-7-26 14:41
楼主有心了,非常感谢
作者: 000012     时间: 2007-7-26 14:41
楼主有心了,非常感谢
作者: wordexport     时间: 2007-9-29 15:56
先顶着,以后用的着
作者: baikaifang     时间: 2007-10-6 17:55
精华贴,看到脑袋充血了。
作者: greenworld     时间: 2007-10-16 12:19
多谢LZ的收集整理,这个得认真学习一下啊,强烈支持了
作者: wjmm     时间: 2008-6-27 09:37
好贴好贴好贴
作者: ReedPond     时间: 2009-12-18 20:19
要顶