中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-23 18:28
47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,274 会员排行
DOS批处理 & 脚本技术(批处理室) » 请教“对于SET命令一些操作符号的使用”
可打印版本  1,425 / 5
第1楼 bagpipe 发表于 2006-05-10 09:07
银牌会员 发帖 425 积分 1,144 来自 北京
请教“对于SET命令一些操作符号的使用”
正如上题,我说的很清楚了,请各位高人能够讲解一下以下各个操作符的具体使用方法!这里先谢过了!!!
() - 分组
* / % - 算数运算符
+ - - 算数运算符
<< >> - 逻辑移位
- 按位“与”
^ - 按位“异”
| - 按位“或”
= *= /= %= += -= - 赋值
&= ^= |= <<= >>=
, - 表达式分隔符
第2楼 bagpipe 发表于 2006-05-10 09:11
银牌会员 发帖 425 积分 1,144 来自 北京
还有就是我想问一下,对于%操作符号,在批处理中用%%形式是为了逃逸一个%,从而变成一个%,但为什么用^符号就不能逃逸呢?是不是因为本身set命令里就已经存在了一个^操作符号的原因呢?如果^符号在批处理中使用,用不用^^来逃逸一个^符号呢???
第3楼 electronixtar 发表于 2006-05-10 11:01
铂金会员 发帖 2,672 积分 7,493
set /? 可以看到一些基本信息
第4楼 3742668 发表于 2006-05-10 13:32
荣誉版主 发帖 718 积分 2,013
其实和一般的算术表达式也没什么不同,例如:

关于用^和%的问题,个人认为:
^在批处理中是用于转义,说白了就是取消在某条命令中的特定功能,而转成cmd.exe中的功能。有点在某个函数中,用public来标记全局变量的意味。
第5楼 willsort 发表于 2006-05-11 17:10
元老会员 发帖 1,512 积分 4,432
Re bagpipe:

关于 set /a 操作符,它们全部脱胎于C语系,想要深入了解它,找一本讲解C语言的书翻阅关于操作符的篇章即可。

关于^和%的问题,实际上它们都具有“逃逸”的特性,也就是说它们在对紧随其后的串进行转义的同时,自身也会被删除,比如你在echo连续的四个^时,实际上只会输出两个^。

在CMD命令行中,“^”的作用是将其后的单个字符字符化,也就是取消类似><|^%这些字符的转义功能,而将它转变为一个具有普通输入输出意义的字符;“%”的作用是将其后的单个字符或者字符串变量化,也即将字符串替换为程序中预先定义好的变量值,它包括命令行参数、环境变量、FOR替换变量。另外,成对的双引号"会将其中包括的命令行串字符化,与此类似的,成对的%会将会将其中命令行串的变量化。

虽然在set/a中%和^又被赋予了另外的数学意义,但是在cmd命令行中,它们的意义仍然不变,所以我们只需要负责传递给set/a一个具有普通意义的表达式字符串即可,至于其中的变量和操作符分析,则一概有set/a独立负责,与CMD命令行无关。而要实现表达式字符串的传递,我们就必须使用一些类似双写的“保护措施”来通过CMD命令行的“逃逸剥削”。

下面的代码范例应该可以更好的说明一些问题。由此代码,我们尚可观察出转义功能符的优先级,即% 大于 " 大于 ^ ,也即^和"不会将%字符化,而^也不会使"的字符化功能丧失。




[ Last edited by willsort on 2006-5-11 at 17:19 ]
第6楼 bagpipe 发表于 2006-05-12 11:04
银牌会员 发帖 425 积分 1,144 来自 北京
谢谢3742668兄和willsort兄的讲解,其实SET这些操作符也不是经常能够用到,不过我学什么都要学到底,学个明白,一知半解不是我的风格,来联盟也半年左右了,呵呵,确实学到不少知识,也认识很多热心的朋友,希望我们大家能够努力为联盟能够做点什么才是....................
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023