| 
 
redtek 
金牌会员
 
      
 
  
  
积分 2902 
发帖 1147 
注册 2006-9-21 
状态 离线
 | 
    『楼 主』:
 [简单索引]SET变量、延时变量、各种符号的用法
 
使用 LLM 解释/回答一下
  
看有的朋友经常为一些变量与符号的用法找来找去, 
其实利用论坛的 “搜索” 功能可以检索到数不清的好贴子~:)
 
下面是一个简单的关于变量、延时变量、赋值、符号、字符替换等常用的贴子索引,方便大家快速查找~:)
 
----------------------------------------------------------------
 
DOS联盟论坛解答室精华帖索引
 http://www.cn-dos.net/forum/viewthread.php?tid=13226&fpage=1
关于变量、符号、字符替换方面的应用的部分索引: 
=================================================================================
 
"set" 你知多少?--------应用实例
 http://www.cn-dos.net/forum/viewthread.php?tid=19150&fpage=1&highlight=SET
理解变量字符的截取功能
 http://www.cn-dos.net/forum/viewthread.php?tid=25746&fpage=1
关于"set & echo"变量替换的延迟
 http://www.cn-dos.net/forum/viewthread.php?tid=18050&fpage=1&highlight=SET
关于setlocal EnableDelayedExpansion 与 "!"
 http://www.cn-dos.net/forum/viewthread.php?tid=21175&fpage=1&highlight=setlocal%2Benabledelayedexpansion
什么情况下该使用变量延迟?
 http://www.cn-dos.net/forum/viewthread.php?tid=20733
如何来替换文本中的“字符?(也就是引号)
 http://www.cn-dos.net/forum/viewthread.php?tid=22245&fpage=1&highlight=%E2%80%9C
最强之dos命令 – for(是新手学习FOR语句的好资料)
 http://www.cn-dos.net/forum/viewthread.php?tid=19331&fpage=1&highlight=for
用for循环进行文本替换
 http://www.cn-dos.net/forum/viewthread.php?tid=21870&fpage=1&highlight=%E6%9B%BF%E6%8D%A2
文件的文字与字母替换问题
 http://www.cn-dos.net/forum/viewthread.php?tid=23815&fpage=1&highlight=%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/viewthread.php?tid=24485&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 ]  
 
    
 
     此帖被 +14 点积分            点击查看详情    | 评分人:【 无奈何 】 | 分数: +12 |   时间:2006-11-6 21:34 |  | 评分人:【 axi 】 | 分数: +2 |   时间:2007-3-18 02:18 |  
  |   
 
 
  
  |  
                  
  
                        Redtek,一个永远在网上流浪的人…… 
 
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |   
 | 
  2006-11-5 08:41 | 
  
 | 
 | 
 
electronixtar 
铂金会员
 
       
 
  
  
积分 7493 
发帖 2672 
注册 2005-9-2 
状态 离线
 | 
『第 2 楼』:
 
 
使用 LLM 解释/回答一下
  
顶了 
 
    
 
  
  |  
                  
  
                     
C:\>BLOG http://initiative.yo2.cn/ 
C:\>hh.exe ntcmds.chm::/ntcmds.htm 
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>" |   
 | 
  2006-11-6 02:29 | 
  
 | 
 | 
 
flying008 
中级用户
 
   
 
  
  
积分 245 
发帖 103 
注册 2006-6-30 
状态 离线
 | 
 | 
  2006-11-6 02:55 | 
  
 | 
 | 
 
ljs3509 
初级用户
 
  
 
  
  
积分 28 
发帖 14 
注册 2006-8-16 
状态 离线
 | 
 | 
  2006-11-6 04:35 | 
  
 | 
 | 
 
zerostudy 
中级用户
 
   
 
  
  
积分 266 
发帖 98 
注册 2006-4-21 
状态 离线
 | 
 | 
  2006-11-6 06:04 | 
  
 | 
 | 
 
vkill 
金牌会员
 
      
 
  
  
积分 4103 
发帖 1744 
注册 2006-1-20 来自 甘肃.临泽 
状态 离线
 | 
 | 
  2006-11-6 07:08 | 
  
 | 
 | 
 
online365 
初级用户
 
  
 
  
 
积分 182 
发帖 75 
注册 2006-10-11 
状态 离线
 | 
 | 
  2006-11-6 18:28 | 
  
 | 
 | 
 
xhz2006 
新手上路
 
 
 
  
  
积分 16 
发帖 7 
注册 2006-4-5 
状态 离线
 | 
 | 
  2006-11-6 20:18 | 
  
 | 
 | 
 
yangzhiyi 
中级用户
 
   
 
  
  
积分 261 
发帖 123 
注册 2006-6-6 
状态 离线
 | 
 | 
  2006-11-8 03:47 | 
  
 | 
 | 
 
honhaizh 
初级用户
 
  
 
  
  
积分 35 
发帖 18 
注册 2006-4-26 
状态 离线
 | 
 | 
  2006-11-16 20:27 | 
  
 | 
 | 
 
yuanzijia08 
初级用户
 
  
 
  
  
积分 78 
发帖 30 
注册 2006-6-17 来自 湖南湘潭 
状态 离线
 | 
 | 
  2006-11-18 01:13 | 
  
 | 
 | 
 
hxuan999 
中级用户
 
    DOS之日
  
 
积分 337 
发帖 161 
注册 2006-11-4 
状态 离线
 | 
『第 12 楼』:
 
 
使用 LLM 解释/回答一下
  
收藏,谢谢了 
 
    
 
  
  |  
                  
  
                    for /f %%h in (`echo hxuan`) do for /f %%x in (`echo hxuan`) do if %%h==%%x nul |   
 | 
  2006-11-23 02:51 | 
  
 | 
 | 
 
zgren1979 
初级用户
 
  
 
  
  
积分 52 
发帖 24 
注册 2006-11-16 
状态 离线
 | 
 | 
  2006-11-23 22:53 | 
  
 | 
 | 
 
jzl168 
初级用户
 
  
 
  
  
积分 38 
发帖 14 
注册 2006-8-16 
状态 离线
 | 
 | 
  2006-12-17 03:56 | 
  
 | 
 | 
 
jmz573515 
银牌会员
 
     
 
  
 
积分 1212 
发帖 464 
注册 2006-12-13 
状态 离线
 | 
 | 
  2006-12-25 22:19 | 
  
 |