如有错误,请大家指正,我拭目以待^&洗耳恭听- @echo off
- set ok=adsl
- set s=abc
- set b=qdj!ok!
- setlocal enabledelayedexpansion
- call echo %%!s:~1,1!%%
- endlocal
-
- pause
复制代码 运行结果是 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
-
- pause
复制代码 输出 ~1,1
原因是call没有对感叹号里面的%进行减半,这样 %%k%% 就无意义了。 |