中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-14 18:13
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]%^"这些符号的预处理顺序?
楼 主 [已结]%^"这些符号的预处理顺序? 发表于 2008-11-22 22:12 ·  中国 天津 联通
初级用户
积分 24
发帖 11
注册 2008-11-22 21:08
UID 131788
性别 男
状态 离线
研究批处理n久,很多难题也在学习前辈的经验之后一一化解,但是还是接连不断遇到莫名其妙的怪现象,下面先上两个例子:
echo ^%^%^%^%

输出^

echo ^%
pause123^%
uuuuu
pause

输出pause123uuuuu

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

[ Last edited by HAT on 2008-11-23 at 20:36 ]
2 发表于 2008-11-22 22:31 ·  中国 江西 赣州 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
UID 96653
性别 男
状态 离线
echo ^%^%^%^%
输出^


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

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 ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
HAT +2 2008-11-23 20:35
3 发表于 2008-11-22 22:55 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
建议在初学批处理的时候,多研究一下实用性,对于这些偏僻的内容可以在自己具备一定功底的时候再去研究。
4 发表于 2008-11-22 23:15 ·  中国 天津 联通
初级用户
积分 24
发帖 11
注册 2008-11-22 21:08
UID 131788
性别 男
状态 离线
谢谢版主前辈建议,只是个人比较喜欢钻点牛角尖,因为这些问题总是出其不意绊我一下,很不爽,想干脆一气把它们连根拔出,呵呵
5 发表于 2008-11-22 23:22 ·  中国 天津 联通
初级用户
积分 24
发帖 11
注册 2008-11-22 21:08
UID 131788
性别 男
状态 离线
忘了提示一点,就是
echo ^%
pause123^%
uuuuu
pause
之中的每个^%后都不能有空格,否则就得不到pause123uuuuu的结果

谢谢你的解答,很受教
6 Re 5楼 发表于 2008-11-22 23:26 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
这里的百分号是多余的,可全部删除。
7 Re 5楼 发表于 2008-11-22 23:26 ·  中国 江西 赣州 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
UID 96653
性别 男
状态 离线
忘了说了:
因为 ^ 将每行后的看不到的“回车符”转义了,“回车符”起不到回车作用,自然就“不换行”了。
8 发表于 2008-11-23 15:40 ·  中国 天津 联通
初级用户
积分 24
发帖 11
注册 2008-11-22 21:08
UID 131788
性别 男
状态 离线
明白,谢谢楼上的各位老大~~
论坛跳转: