中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教“对于SET命令一些操作符号的使用”
作者:
标题: 请教“对于SET命令一些操作符号的使用” 上一主题 | 下一主题
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『楼 主』:  请教“对于SET命令一些操作符号的使用”

正如上题,我说的很清楚了,请各位高人能够讲解一下以下各个操作符的具体使用方法!这里先谢过了!!!
()                  - 分组
* / %               - 算数运算符
+ -                 - 算数运算符
<< >>               - 逻辑移位
                   - 按位“与”
^                   - 按位“异”
|                   - 按位“或”
= *= /= %= += -=    - 赋值
  &= ^= |= <<= >>=
,                   - 表达式分隔符

2006-5-10 09:07
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 2 楼』:  

还有就是我想问一下,对于%操作符号,在批处理中用%%形式是为了逃逸一个%,从而变成一个%,但为什么用^符号就不能逃逸呢?是不是因为本身set命令里就已经存在了一个^操作符号的原因呢?如果^符号在批处理中使用,用不用^^来逃逸一个^符号呢???

2006-5-10 09:11
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 3 楼』:  

set /? 可以看到一些基本信息

2006-5-10 11:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 4 楼』:  

其实和一般的算术表达式也没什么不同,例如:
@echo off
set /a num = 5*(3+4)
echo 3加4乘以5等于 %num%
set /a num = 3 "^" 2
echo 3异或2等于%num%
set /a num = 4 "<<" 2
echo 4左移2位等于 %num%
set /a a=3,b=4,c=5,num=a+b+c
关于用^和%的问题,个人认为:
^在批处理中是用于转义,说白了就是取消在某条命令中的特定功能,而转成cmd.exe中的功能。有点在某个函数中,用public来标记全局变量的意味。

2006-5-10 13:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 5 楼』:  

Re bagpipe:

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

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

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

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

      下面的代码范例应该可以更好的说明一些问题。由此代码,我们尚可观察出转义功能符的优先级,即% 大于 " 大于 ^ ,也即^和"不会将%字符化,而^也不会使"的字符化功能丧失。
@echo off
set /a t1=1^3
echo "%t1%=1^3"
:: t1值为13,因为单个^在cmd中被脱去,其后3被字符化,与1构成字符串13,在set/a中被解析为数字
set /a t2=1^^3
echo "%t2%=1^^3"
:: t2值为2,因为双个^在cmd中被脱为单个^,在set/a中被解析为异或操作符,其数学意义结果即2
set /a t3=5%3
echo "%t3%=5%3"
:: t3值为1,因为单个%在cmd中被脱去,其后3被解析为第三命令行参数,在无参数调用时被替换为空
set /a t4=5%%3
echo "%t4%=5%%3"
:: t3值为2,因为双个%在cmd中被脱为单个%,在set/a中被解析为取余操作符,其数学意义结果即2
[ Last edited by willsort on 2006-5-11 at 17:19 ]



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-5-11 17:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 6 楼』:  

谢谢3742668兄和willsort兄的讲解,其实SET这些操作符也不是经常能够用到,不过我学什么都要学到底,学个明白,一知半解不是我的风格,来联盟也半年左右了,呵呵,确实学到不少知识,也认识很多热心的朋友,希望我们大家能够努力为联盟能够做点什么才是....................

2006-5-12 11:04
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: