cmd批处理转义字符%的详细解释

1、%是个ESCAPE字符,通常将之译为转义字符,但也有更形象的译名脱逸字符、逃逸字符等。也就是说%不仅仅将与其相关的特定字符串转义并替换为特定字符串,而且自身也会被“脱逸”。而且类似于C语言中的转义字符"\",双%会转义并脱逸为单%,四%则脱为双%。

2、for本身是一个特殊的命令,类似于一个特化的命令解释器,因为它的功能实现需要执行多条语句,因此它必须也具有对命令行(特指do后的命令行)分析处理的功能。而command/cmd实现for时自然会借用自身原有的命令行分析模块,因此for具有二级转义的特性,for中do后的语句被分两级分析和解释,第一级在command/cmd读入并解释for命令行时,第二级在for读入并解释do命令时,它通常会对同一命令行的进行多次解释。

然后,我们可以注意到,在do中使用命令行参数变量和环境变量时,不需要双%,那是因为,这些变量在经过第一级转义后,被替换成特定的不变的字符串常量,参与for循环的所有执行过程;而替代变量则要求在执行(do后的子命令行中)过程中不断的动态变化,而这个变化自然仍需要通过脱逸字符来实现,因此使用双%就是成了必然的选择。

另外,还需要注意到,在命令行中使用for时不需要双%,这源于命令解释器对命令行与批处理的处理方式不同。在早期的DOS版本中,%在命令行中不被视为转义字符,所以不会被转义和脱逸,所以当时无法在命令行直接引用环境变量。而使用for时,只需要一个%供for进行转义和脱逸就够了。在以后的命令解释器版本中,加入了命令行转义的支持(主要是环境变量的支持),但命令行for使用单%的传统仍然保留了下来。

而 cmd中的变量延迟替换是属于特殊的情况,但不违背以上的转义原则,只是for中的环境变量不再是常量了。

(0)

相关推荐

  • cmd批处理转义字符%的详细解释

    1.%是个ESCAPE字符,通常将之译为转义字符,但也有更形象的译名脱逸字符.逃逸字符等.也就是说%不仅仅将与其相关的特定字符串转义并替换为特定字符串,而且自身也会被"脱逸".而且类似于C语言中的转义字符"\",双%会转义并脱逸为单%,四%则脱为双%. 2.for本身是一个特殊的命令,类似于一个特化的命令解释器,因为它的功能实现需要执行多条语句,因此它必须也具有对命令行(特指do后的命令行)分析处理的功能.而command/cmd实现for时自然会借用自身原有的命令

  • cmd 环境变量设置方法详细解释

    cmd设置环境变量可以方便我们bat脚本的运行,但是要注意的是变量只在当前的cmd窗口有作用(局部生效),如果想要设置持久的环境变量需要我们通过两种手段进行设置:一种是直接修改注册表,另一种是通过我的电脑-〉属性-〉高级,来设置系统的环境变量. 1.查看当前所有可用的环境变量:输入 set 即可查看. 2.查看某个环境变量:输入 "set 变量名"即可,比如想查看temp变量的值,即输入 set temp 当然也可以使用echo %temp% 3.修改环境变量 :输入 "se

  • 批处理 数码雨代码解释

    做了一个批处理的数码雨,老题目了 主要给新手看 主要用于了解批处理的一下知识 1.随机变量的使用 2.变量的叠加 下面是源代码: 复制代码 代码如下: @echo off color 0a :start set num=0 set "echos= " :num set /a a1=%random%%%3 if "%a1%" == "1" set "a1= " if "%a1%" == "2&quo

  • bat/cmd批处理连接SqlServer数据库查询脚本

    难得今天晚上9点前赶回家,而且最近草稿箱也压了不少"湿货",就挑一篇发出来好了!不过在发文章之前先吐槽一下那个从昨天攻击张戈博客到现在还在继续的无聊蛋疼之人! 本来就算开启了云加速全缓存也是扛不住的,因为静态中混着动态请求,比如浏览计数.还好灵机一动,对这些动态做了点小手脚,现在基本毫无压力了!粗略分析一下这个攻击博客的小人,无外乎是2种人: ①.最近张戈博客流量大涨,估计遭人妒忌或者是挡人财路: ②.来张戈博客换友链被拒或被忽略的人,怀恨在心. 对于①:俗话说无人妒忌是庸才,那么无人

  • linux下的tar命令详细解释

    tar命令 [root@Linux ~]# tar [-cxtzjvfpPN] 文件与目录 .... 参数: -c :建立一个压缩文件的参数指令(create 的意思): -x :解开一个压缩文件的参数指令! -t :查看 tarfile 里面的文件! 特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在! 因为不可能同时压缩与解压缩. -z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩? -j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压

  • 易语言运算命令的详细解释

    本篇内容针对易语言运算命令的位取反.位于.位或.位异或做了详细解释 易语言3.5版提供了4个位运算命令. 1.位取反 位取反命令将指定数值转换为二进制后,对每一比特位的值取反,即0变为1,1变为0,然后转换成十进制数,返回值是转换后的十进制数. "位取反"命令的命令格式是: 〈整数型〉 位取反 (欲取反的数值) 参数"欲取反的数值"的类型为"整数型". 2.位与 位与命令将所给的数值全部转换为二进制,对所有二进制数值的共同比特位进行"与

  • Python实现随机游走的详细解释

    1.单一的500步随机游走的例子,从0开始,步长为1和-1,且以相等的概率出现. 注:需要python的内置函数random,不需安装,直接导入即可 import random -*- coding: utf-8 -*- import matplotlib.pyplot as plt import random position=0#设置初始位置 walk=[]#保存位置 steps=500#设置步数为500步 for i in range(steps): step=1 if random.ra

  • Linux内核宏Container_Of的详细解释

    目录 1. 结构体在内存中是如何存储的 2. container_of宏 3. typeof 4. (((type *)0)->member) 5. const typeof(((type * )0) ->member)*__mptr = (ptr); 6. offsetof(type, member)) 7. (type * )((char * )__mptr - offsetof(type, member)) 8. 举例 1. 结构体在内存中是如何存储的 int main() { Stud

  • package.json与package-lock.json的区别及详细解释

    目录 package.json package-lock.json 两者区别: package-lock.json的作用 补充:关于package-lock.json的详细解释 总结 package.json 记录当前项目所依赖模块的版本信息,更新模块时锁定模块的大版本号(版本号的第一位),不能锁定后面的小版本, package-lock.json package-lock.json 是在 `npm install`时候生成一份文件.记录了node_modules目录下所有模块(包)的名称.版本

  • 正则表达式预查的详细解释与应用实例

    目录 解释 应用 难点-为什么.?[^#/n]?.*?不行 总结 解释 预查又称环视(Lookaround).属于零宽断言(Zero-Length Assertions)的一种,有 4 个语法: 语法 中文名 英文名 (?=regex) 肯定性前瞻 Positive lookahead (?!regex) 否定性前瞻 Negative lookahead (?<=regex) 肯定性后顾 Positive lookbehind (?<!regex) 否定性后顾 Negative lookbeh

随机推荐