Board logo

标题: [已结]%^"这些符号的预处理顺序? [打印本页]

作者: maky1117     时间: 2008-11-22 22:12    标题: [已结]%^"这些符号的预处理顺序?

研究批处理n久,很多难题也在学习前辈的经验之后一一化解,但是还是接连不断遇到莫名其妙的怪现象,下面先上两个例子:
echo ^%^%^%^%
输出^
echo ^%
pause123^%
uuuuu
pause
输出pause123uuuuu

很搞不懂^%是代表什么意思,哪位前辈能不吝为我指点迷津?另外我很想知道cmd解释器的预处理机制,它的解释原理是怎么样一个先后顺序的,这就如瞎猜西瓜熟透了没不如切开看个一目了然。

[ Last edited by HAT on 2008-11-23 at 20:36 ]
作者: tireless     时间: 2008-11-22 22:31


  Quote:
echo ^%^%^%^%
输出^

我觉得是这样:
先扩展变量 %^%%^%,因为没有定义变量 ^,所以就只剩下两个 ^^,最后变成一个 ^。

  Quote:
echo ^%
pause123^%
uuuuu
pause
输出pause123uuuuu

批处理中单独的 % 符号会被“抹”掉:
C:\>type test.bat
echo %
C:\>test.bat

C:\>echo
ECHO 处于打开状态。


————————————————
预处理究竟是如何进行的
http://www.cn-dos.net/forum/viewthread.php?tid=43905#pid305954

[ Last edited by tireless on 2008-11-22 at 23:30 ]
作者: HAT     时间: 2008-11-22 22:55
建议在初学批处理的时候,多研究一下实用性,对于这些偏僻的内容可以在自己具备一定功底的时候再去研究。
作者: maky1117     时间: 2008-11-22 23:15
谢谢版主前辈建议,只是个人比较喜欢钻点牛角尖,因为这些问题总是出其不意绊我一下,很不爽,想干脆一气把它们连根拔出,呵呵
作者: maky1117     时间: 2008-11-22 23:22
忘了提示一点,就是
echo ^%
pause123^%
uuuuu
pause
之中的每个^%后都不能有空格,否则就得不到pause123uuuuu的结果

谢谢你的解答,很受教
作者: HAT     时间: 2008-11-22 23:26    标题: Re 5楼

这里的百分号是多余的,可全部删除。
作者: tireless     时间: 2008-11-22 23:26    标题: Re 5楼

忘了说了:

  Quote:
因为 ^ 将每行后的看不到的“回车符”转义了,“回车符”起不到回车作用,自然就“不换行”了。


作者: maky1117     时间: 2008-11-23 15:40
明白,谢谢楼上的各位老大~~