如有错误,请大家指正,我拭目以待^&洗耳恭听 | @echo off | | set ok=adsl | | set s=abc | | set b=qdj!ok! | | setlocal enabledelayedexpansion | | call echo %%!s:~1,1!%% | | endlocal | | | | pauseCOPY |
运行结果是 qdj!ok!
关键在于call echo %%!s:~1,1!%%
预处理是这样的:
1去掉call, 把%%减半,然后替换!s:~1,1!变成 echo %b%
2 替换%b% 变成echo qdj!ok!,虽然这里出现了感叹号,但是cmd不再扩展了,(你知道是怎么回事吗?)
这样就输出 qdj!ok! | @echo off | | set ok=adsl | | setlocal enabledelayedexpansion | | call echo !%%ok%%:~1,1! | | endlocal | | | | pauseCOPY |
输出 ~1,1
原因是call没有对感叹号里面的%进行减半,这样 %%k%% 就无意义了。 |