- @echo off &setlocal enabledelayedexpansion
- set a=%%%%s%%%%
- echo !a!
- echo %a%
- set s=qdj
- call call call echo %a%
- pause
复制代码 运行后为
%%s%%
%%s%%
qdj
请按任意键继续. . .
下面是解释:
set a=%%%%s%%%% 预处理时,将%%变成%,这样就把a赋值为 %%s%%
echo !a! 此句经过两次预处理就变成 echo %%s%%
echo %a% 预处理时,替换%a% 得到 echo %%s%% 由于这里的%是存在于变量a中的,所以没有被当成是特殊字符。但如果直接是 echo %%ss 之类的,%将被当做特殊字符。
重点是 call call call echo %a%
%a%替换后为 call call call echo %%s%%(注意,这里由于call的存在,已经不分第一次第二次预处理了,同时call也会引发预处理)
第一个call后 为 call call echo %s%
第二个call后,为 call echo qdj
第三个call后,仍旧是 echo qdj 也就是这个call不起作用!
最后echo输出qdj |