![]() |
中国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 |