Board logo

标题: BAT中同时有call 和 !!时预处理是怎么样的? [打印本页]

作者: 悬崖之树    时间: 2012-12-18 22:44     标题: 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. )
复制代码

作者: 悬崖之树    时间: 2012-12-19 21:05

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




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2