Board logo

标题: [文本处理] %%i%%这个符号在批处理里面何时使用? [打印本页]

作者: fengyun530    时间: 2011-5-21 19:25     标题: %%i%%这个符号在批处理里面何时使用?

%%i%%这个符号表示的是什么意思?

一般情况都是用%%i 或%i%为变量名称,预处理也是!i!。那么%%i%%是何时在用呢?谢谢!
作者: michael8111    时间: 2011-5-21 19:30

  1. @echo off
  2. set num=0&&call echo %%num%%
  3. pause
复制代码
比如上段代码,这时变量延迟的另一种形式,等效于以下代码:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set num=0&&echo !num!
  4. 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://bbs.bathome.net/) Powered by Discuz! 7.2