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

BAT中同时有call 和 !!时预处理是怎么样的?

  1. @echo off & setlocal enabledelayedexpansion
  2.    set "k=qdj"
  3.    set sqdj=ok
  4.    echo %k%
  5.    call call echo %%%%k%%%%m%%%%%%%%
  6.    call echo %%s!k!%%
  7. )
复制代码
时光荏苒||新陈代谢&&涛声依旧||本性难移

我是这样认为在 call call echo %%%%k%%%%m%%%%%%%% 里
第一次call后,变成 call echo %%k%%m%%%% ,为什么k 和 m 没有被替换,是因为他们两边的%都是偶数。
第二次call后,变成 echo %k%m%%
最后一步替换变量 代码变成 echo qdjm%,因为%号是第一个和第二个配对的,一次类推。所以后面的m并不是变量,而是普通字符,最后的%%则被处理成%,这样就输出 qdjm% 了。
由于call的存在,变量被表示成%%变量%% 的形式,这样就无法在预处理时直接进行扩展,只有到解释call后,将 %%变量% % 还原成%变量%,然后再扩展,这就相当于使用了变量延迟扩展。
时光荏苒||新陈代谢&&涛声依旧||本性难移

TOP

返回列表