标题: [文本处理] %%i%%这个符号在批处理里面何时使用? [打印本页]
作者: fengyun530 时间: 2011-5-21 19:25 标题: %%i%%这个符号在批处理里面何时使用?
%%i%%这个符号表示的是什么意思?
一般情况都是用%%i 或%i%为变量名称,预处理也是!i!。那么%%i%%是何时在用呢?谢谢!
作者: michael8111 时间: 2011-5-21 19:30
- @echo off
- set num=0&&call echo %%num%%
- pause
复制代码
比如上段代码,这时变量延迟的另一种形式,等效于以下代码:- @echo off
- setlocal enabledelayedexpansion
- set num=0&&echo !num!
- pause
复制代码
作者: CrLf 时间: 2011-5-21 19:38
本帖最后由 zm900612 于 2011-5-22 13:52 编辑
cmd进行预处理的时候是从左到右的,首先,若在碰到单独的%之前就碰到%%就把它翻译为%,若该条件不成立则优先翻译%0~%9,接下来如果碰到单独的%就将它与下个%之间的内容翻译为变量,也就是除了翻译%0~%9的时候,%总是成对解释的。
这里的%%i%%嘛,如果它不在一个以%%i为参数的循环内,而且之前没有其他的%,那么很明显,【%%】i【%%】会被解释为%i%,这一般是在需要输出百分号的时候才这么用,当然也经常见到call %%%i%%%之类的变量嵌套,它就是利用预处理机制来实现无!的变量延迟
作者: applba 时间: 2011-5-21 22:33
还有一种变量延迟……即不用%%,也不用!。
作者: fengyun530 时间: 2011-5-21 23:18
还有一种变量延迟……即不用%%,也不用!。
applba 发表于 2011-5-21 22:33
你说的是call echo %%i吧!这种也不需要加setlocal。
作者: applba 时间: 2011-5-22 00:01
本帖最后由 applba 于 2011-5-22 00:03 编辑
5# fengyun530
不是,不需要任何%或!符号。
其实就是set /a中直接用变量名称啦。
比如set /a a+=2
比如set /a a=(b+c)*2
纯属娱乐
作者: fengyun530 时间: 2011-5-22 10:12
set /a a+=2这个是通过数学方式设置变量。而其他形式的 %或!是使用变量。这是哪跟哪啊。晕了倒!
作者: Hello123World 时间: 2011-5-22 13:28
3楼的说法没看懂,新学了一点——%%变量名%%——这个可以作为变量延迟的一种方法。
作者: applba 时间: 2011-5-22 16:14
7# fengyun530
的确有延迟效果的啊……
要不你把set/a中变量全部换成%a%形式看看……
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |