标题: 请教“对于SET命令一些操作符号的使用”
[打印本页]
作者: bagpipe
时间: 2006-5-10 09:07
标题: 请教“对于SET命令一些操作符号的使用”
正如上题,我说的很清楚了,请各位高人能够讲解一下以下各个操作符的具体使用方法!这里先谢过了!!!
() - 分组
* / % - 算数运算符
+ - - 算数运算符
<< >> - 逻辑移位
- 按位“与”
^ - 按位“异”
| - 按位“或”
= *= /= %= += -= - 赋值
&= ^= |= <<= >>=
, - 表达式分隔符
作者: bagpipe
时间: 2006-5-10 09:11
还有就是我想问一下,对于%操作符号,在批处理中用%%形式是为了逃逸一个%,从而变成一个%,但为什么用^符号就不能逃逸呢?是不是因为本身set命令里就已经存在了一个^操作符号的原因呢?如果^符号在批处理中使用,用不用^^来逃逸一个^符号呢???
作者: electronixtar
时间: 2006-5-10 11:01
set /? 可以看到一些基本信息
作者: 3742668
时间: 2006-5-10 13:32
其实和一般的算术表达式也没什么不同,例如:
@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来标记全局变量的意味。
作者: willsort
时间: 2006-5-11 17:10
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 ]
作者: bagpipe
时间: 2006-5-12 11:04
谢谢3742668兄和willsort兄的讲解,其实SET这些操作符也不是经常能够用到,不过我学什么都要学到底,学个明白,一知半解不是我的风格,来联盟也半年左右了,呵呵,确实学到不少知识,也认识很多热心的朋友,希望我们大家能够努力为联盟能够做点什么才是....................