中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-07 05:12
48,040 主题排行 / 350,125 发帖 / 今日 1 篇 / 48,252 会员排行
DOS批处理 & 脚本技术(批处理室) » [整理参考] CMD/DOS下符号的作用参考
可打印版本  156,799 / 216
第16楼 lxmxn 发表于 2007-05-31 10:08
版主 发帖 4,938 积分 11,386
Re qzwqzw

“记得曾经有人说过
它不过是一个无效的标签而已
注释只是它的副作用”
已经去掉了关于::的解释。

“因为cmd检查到冒号后有无效字符时直接忽略处理”
测试发现无所谓“无效”字符,可以是任何字符。

“相反数的说法容易让人误解”
已经修改过来了,先前这样写是让别人容易理解写,但是没有描述其具体的本质作用。

“^是按位异或”
已经修改。
btw,想问一下,异或 和 异有什么区别呢?
第17楼 qzwqzw 发表于 2007-05-31 12:42
银牌会员 发帖 636 积分 2,343
测试发现无所谓“无效”字符,可以是任何字符。
-----------------------
:字符后当然可以是任何字符
因为无效字符cmd是忽略解释的

怎么可以知道这一点呢?
定制一个这样的标签 ::errorlabel
然后试着goto ::errorlabel
如果能goto到说明是有效的
否则是无效的

我们的注释自然是需要无效的标签标记
否则有可能跟系统定义的或者我们定义的标签冲突

关于::的由来其实早有渊源
起初是因为 ms-dos 给的 rem 命令后无法直接使用管道和重定向符号
而且如果不echo off它的代码就会在运行时回显
所以就有人钻了这么一个漏子而已

从这几点也可以看出
因为少了许多预处理的过程
使用::的效率要高于rem

后来虽然cmd中虽然对rem作了许多改进
但::因为简单易用并且接近高级语言的注释标记
所以已经流传开来
----------------------------------

我没有见过“按位异”的说法
“异或”的意思是 不同于“或”
因为或的规则是
0|0=0
0|1=1
1|0=1
1|1=1

而异或稍有变化
0^0=0
0^1=1
1^0=1
1^1=0

[ Last edited by qzwqzw on 2007-5-31 at 12:46 PM ]
第18楼 lxmxn 发表于 2007-05-31 15:10
版主 发帖 4,938 积分 11,386
多谢qzwqzw释疑。。

我说的:后面可以是任何字符,是指在做注释时,没有被调用的标签都可以做注释。

关于goto ::errorlabel这样一个标签,无论如何也goto不到,所以用::就比较合理了。

个人理解是因为在goto里面,如果标签里面有:号,那么这个分号只是一个分隔符而已,类似的还有几个,比如 , : ( ,在它们后面的字符就不作解释了。
如果 goto ::errorlabel ,那么批处理就认为是在goto一个空的标签,而空的标签是无法构造和让goto起作用的。

示例:(为了可以返回用call代替了goto)


[ Last edited by lxmxn on 2007-5-31 at 08:15 PM ]
第19楼 qzwqzw 发表于 2007-05-31 19:08
银牌会员 发帖 636 积分 2,343
你对::的理解比我更确切
-----------------------------------------------------------------------

从预处理的角度分析

在goto和:label的预处理过程中
所有的特殊字符全部被转义或过滤
而goto ::label被预处理成了个 goto 空标签 label
label被goto忽略

因为无法为空标签设置跳转标记
所以::label不会起作用
-----------------------------------------------------------------------

“:是无效字符”更确切的说是“:等字符是用于界定token的分隔符(或者界定符)”
“cmd忽略无效标签”更确切的说是“goto忽略了空标签后的多余参数”

[ Last edited by qzwqzw on 2007-6-2 at 11:51 PM ]
第20楼 scriptor 发表于 2007-06-01 00:59
银牌会员 发帖 555 积分 1,187
Originally posted by lxmxn at 2007-5-30 22:24:
Re scriptor:

嗯,多谢补充,我再添加进去。

根据 qzwqze 15楼的解释,已经取消了关于::的注释说明。

[ Last edited by lxmxn on 2007-5-31 at 10:17 AM ]


呵呵
没事!

15#
看来我知道的太少啊

惭愧 。
第21楼 dinfli 发表于 2007-06-01 01:50
初级用户 发帖 82 积分 180
DDDDDD
第22楼 qinbuer 发表于 2007-06-01 02:16
高级用户 发帖 228 积分 512
少的就是它!
第23楼 wj12390 发表于 2007-06-04 15:08
新手上路 发帖 9 积分 18
呵呵。
好东西
第24楼 Li103Z 发表于 2007-06-07 11:11
初级用户 发帖 38 积分 70
8错
第25楼 haiou327 发表于 2007-06-22 01:22
高级用户 发帖 348 积分 713
收藏了。
第26楼 wgx1688 发表于 2007-06-24 12:14
初级用户 发帖 34 积分 60
不怎么懂啊~!!
第27楼 qzwqzw 发表于 2007-06-26 11:11
银牌会员 发帖 636 积分 2,343
%=
① 在set /a中的二元运算符。例如set /a a"%="b表示将a除以b的余数赋值给a。
【 %= 两边加上 " 防止 % 被转义,下同。】
--------------------------------------------------------------------------
【】里的说明有问题
cmd的命令行预处理中
%的解析早于"
也就是说%的优先级高于"
所以引号对不能取消%的转义

这里应该说明的是
在命令行中用单个%没有问题
set /a a%=b

在批处理中需要使用双%
set /a a%%=b
第28楼 wl48693752 发表于 2007-06-26 11:49
初级用户 发帖 9 积分 24
好哦,收藏了
第29楼 wl48693752 发表于 2007-06-26 13:01
初级用户 发帖 9 积分 24
能有份这样汇集批处理知识的帖子或者文章就好了
第30楼 Lick 发表于 2007-06-26 13:12
初级用户 发帖 28 积分 62
多谢分享了,收藏了!
上一页  1 2 3 4 515  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023