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

[文本处理] Call和延迟变量

  1. @echo off
  2. set var=12345
  3. for /l %%a in (1 1 3) do (
  4. set var=%%a
  5. echo %var%
  6. call echo %%var%%
  7. )
  8. pause
复制代码
这两天做了wxcute新手习题,发现自己经常用错延迟变量。原来以为只有do后面的()里才需要用到延迟变量,现在才发现,只要是复合语句里面就都要用到延迟变量。不过同时也对call这个命令产生了一些疑问。

在上面这段代码里面,我使用call以后可以达到跟延迟变量相同的效果,我想知道为什么call可以到达这样的效果。

另外为什么call echo %%var%%一定要用双%号
我看过这个帖子http://bbs.bathome.net/thread-502-1-1.html
里面提到“在do中使用命令行参数变量和环境变量时,不需要双%,那是因为,这些变量在经过第一级转义后,被替换成特定的不变的字符串常量,参与for循环的所有执行过程”
我对这点感到比较迷惑,请大家帮忙解释一下。

什么是延迟环境变量扩展?
http://bbs.bathome.net/thread-3083-1-1.html

变量延迟详解
http://bbs.bathome.net/thread-2898-1-1.html

什么情况下该使用变量延迟
http://bbs.bathome.net/thread-2899-1-1.html

一个变量嵌套变量的问题
http://bbs.bathome.net/thread-2900-1-1.html

什么时候使用延迟变量?为什么要使用?
http://bbs.bathome.net/viewthread.php?tid=112

延迟变量通俗解释
http://bbs.bathome.net/viewthread.php?tid=354
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

这个跟预处理有关。。。

我们知道,在批处理执行命令之前,会先进行一次预处理。。。

例如执行echo %var%命令,执行前会先预处理成echo 123,然后就执行echo 123

对于%号来说,预处理就是把偶数个替换成奇数个,例如:%%会变成%
奇数个百分号则成对替换成变量(变量未定义则不替换),例如%var%会变成123

那么我们现在看一下call echo %%var%%这个语句:
执行call这个语句前,要先预处理一次,变成了call echo %var%
到了实际执行完call的时候,call要求执行一个echo %var%命令,那么执行echo %var%就会预处理,变成了echo 123

TOP

很好很强大,下次我也直接给链接好了。。。

TOP

返回列表