中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-22 22:23
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [整理参考] CMD/DOS下符号的作用参考 置顶I 查看 153,264 回复 216
16 发表于 2007-05-31 10:08 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线
Re qzwqzw

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

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

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

“^是按位异或”
已经修改。
btw,想问一下,异或 和 异有什么区别呢?
17 发表于 2007-05-31 12:42 ·  中国 山西 运城 联通
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
22年会员
UID 19350
性别 男
状态 离线
测试发现无所谓“无效”字符,可以是任何字符。
-----------------------
:字符后当然可以是任何字符
因为无效字符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 发表于 2007-05-31 15:10 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线
多谢qzwqzw释疑。。

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

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

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

示例:(为了可以返回用call代替了goto)
@echo off
call :hello;bat
call :hello,vbs
call :hello:asm
call :hello(java
call ::hello
pause&goto :eof

:hello
echo This is one line.
goto :eof
:
echo This is other line.


[ Last edited by lxmxn on 2007-5-31 at 08:15 PM ]
19 发表于 2007-05-31 19:08 ·  中国 山西 运城 联通
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
22年会员
UID 19350
性别 男
状态 离线
你对::的理解比我更确切
-----------------------------------------------------------------------

从预处理的角度分析

在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 发表于 2007-06-01 00:59 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
19年会员
UID 74129
性别 男
状态 离线
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 发表于 2007-06-01 01:50 ·  中国 湖北 武汉 电信
初级用户
★★
积分 180
发帖 82
注册 2007-01-11 23:02
19年会员
UID 76206
性别 男
状态 离线
DDDDDD
好爱你哦。。。老婆
22 发表于 2007-06-01 02:16 ·  中国 广东 佛山 电信
高级用户
★★
我思故我在
积分 512
发帖 228
注册 2007-01-21 10:31
19年会员
UID 77225
性别 男
状态 离线
少的就是它!
我确实是只菜鸟,而且这里X人太多,所以我不敢装X。谁要再说我装X,我就XXOO他。
23 呵呵。 发表于 2007-06-04 15:08 ·  中国 安徽 合肥 联通
新手上路
积分 18
发帖 9
注册 2007-06-01 17:41
19年会员
UID 89988
性别 男
状态 离线
好东西
24 发表于 2007-06-07 11:11 ·  中国 广东 广州 电信
初级用户
积分 70
发帖 38
注册 2007-05-23 07:20
19年会员
UID 89024
性别 男
状态 离线
8错
25 发表于 2007-06-22 01:22 ·  中国 广东 汕头 潮阳区 电信
高级用户
★★★
DOS时空
积分 713
发帖 348
注册 2007-02-10 13:59
19年会员
UID 79169
性别 男
状态 离线
26 发表于 2007-06-24 12:14 ·  中国 湖南 长沙 联通
初级用户
积分 60
发帖 34
注册 2007-04-24 02:13
19年会员
UID 86232
性别 男
状态 离线
不怎么懂啊~!!
27 发表于 2007-06-26 11:11 ·  中国 山西 运城 联通
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
22年会员
UID 19350
性别 男
状态 离线
%=
① 在set /a中的二元运算符。例如set /a a"%="b表示将a除以b的余数赋值给a。
【 %= 两边加上 " 防止 % 被转义,下同。】
--------------------------------------------------------------------------
【】里的说明有问题
cmd的命令行预处理中
%的解析早于"
也就是说%的优先级高于"
所以引号对不能取消%的转义

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

在批处理中需要使用双%
set /a a%%=b
28 发表于 2007-06-26 11:49 ·  中国 新疆 乌鲁木齐 电信
初级用户
积分 24
发帖 9
注册 2007-06-13 13:26
19年会员
UID 91175
性别 男
状态 离线
好哦,收藏了
29 发表于 2007-06-26 13:01 ·  中国 新疆 乌鲁木齐 电信
初级用户
积分 24
发帖 9
注册 2007-06-13 13:26
19年会员
UID 91175
性别 男
状态 离线
能有份这样汇集批处理知识的帖子或者文章就好了
30 发表于 2007-06-26 13:12 ·  中国 广东 佛山 电信
初级用户
积分 62
发帖 28
注册 2006-03-14 02:15
20年会员
UID 51994
状态 离线
多谢分享了,收藏了!
论坛跳转: