![]() |
中国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: 呵呵 没事! 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 5 … 15 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |