[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] %%i%%这个符号在批处理里面何时使用?

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

一般情况都是用%%i 或%i%为变量名称,预处理也是!i!。那么%%i%%是何时在用呢?谢谢!

  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
复制代码
SZDLite Security Lab

TOP

本帖最后由 zm900612 于 2011-5-22 13:52 编辑

cmd进行预处理的时候是从左到右的,首先,若在碰到单独的%之前就碰到%%就把它翻译为%,若该条件不成立则优先翻译%0~%9,接下来如果碰到单独的%就将它与下个%之间的内容翻译为变量,也就是除了翻译%0~%9的时候,%总是成对解释的。
这里的%%i%%嘛,如果它不在一个以%%i为参数的循环内,而且之前没有其他的%,那么很明显,【%%】i【%%】会被解释为%i%,这一般是在需要输出百分号的时候才这么用,当然也经常见到call %%%i%%%之类的变量嵌套,它就是利用预处理机制来实现无!的变量延迟

TOP

还有一种变量延迟……即不用%%,也不用!。

TOP

还有一种变量延迟……即不用%%,也不用!。
applba 发表于 2011-5-21 22:33


你说的是call echo %%i吧!这种也不需要加setlocal。

TOP

本帖最后由 applba 于 2011-5-22 00:03 编辑

5# fengyun530


不是,不需要任何%或!符号。

其实就是set /a中直接用变量名称啦。

比如set /a a+=2
比如set /a a=(b+c)*2

纯属娱乐

TOP

set /a a+=2这个是通过数学方式设置变量。而其他形式的 %或!是使用变量。这是哪跟哪啊。晕了倒!

TOP

3楼的说法没看懂,新学了一点——%%变量名%%——这个可以作为变量延迟的一种方法。

TOP

7# fengyun530


的确有延迟效果的啊……
要不你把set/a中变量全部换成%a%形式看看……

TOP

返回列表