批处理常用命令及用法大全(8)

2019-08-30 12:05

特定字符串,而且自身也会被“脱逸”。而且类似于C语言中的转义字符\,双%会转义并脱逸为单%,四%则脱为双%。

2、for本身是一个特殊的命令,类似于一个特化的命令解释器,因为它的功能实现需要执行多条语句,因此它必须也具有对命令行(特指do后的命令行)分析处理的功能。而command/cmd实现for时自然会借用自身原有的命令行分析模块,因此for具有二级转义的特性,for中do后的语句被分两级分析和解释,第一级在command/cmd读入并解释for命令行时,第二级在for读入并解释do命令时,它通常会对同一命令行的进行多次解释。

然后,我们可以注意到,在do中使用命令行参数变量和环境变量时,不需要双%,那是因为,这些变量在经过第一级转义后,被替换成特定的不变的字符串常量,参与for循环的所有执行过程;而替代变量则要求在执行(do后的子命令行中)过程中不断的动态变化,而这个变化自然仍需要通过脱逸字符来实现,因此使用双%就是成了必然的选择。

另外,还需要注意到,在命令行中使用for时不需要双%,这源于命令解释器对命令行与批处理的处理方式不同。在早期的DOS版本中,%在命令行中不被视为转义字符,所以不会被转义和脱逸,所以当时无法在命令行直接引用环境变量。而使用for时,只需要一个%供for进行转义和脱逸就够了。在以后的命令解释器版本中,加入了命令行转义的支持(主要是环境变量的支持),但命令行for使用单%的传统仍然保留了下来。

而cmd中的变量延迟替换是属于特殊的情况,但不违背以上的转义原则,只是for中的环境变量不再是常量了。

除了for循环变量外,批处理变量的脱逸符要成对使用,就像数学四则运算的括号一样。

call set b=%%a:~0,%c%%%

最里面一对单%相当于四则运算里的小括号,外面的一对双%相当于中括号,再有3 个%就相当于大括号。

48.位运算符

位运算符是对于更小的单位——位,进行运算(1字节=8位)。 进行位运算符的学习,需要对2进制有所了解,懂得简单的 10进制 to 2进制 的相互转换,而且要对原码、反码、补码的概念有所了解。

10进制=(8位)2进制补码: 9=0000 1001 5=0000 0101 -9=1111 0111

1.按位与 运算符(&)

这里,为了方便后面的教学,我们暂且将1称为真,0称为假。

C:\\Users\\helloworld\\Desktop>set /a 9^&5 1

C:\\Users\\helloworld\\Desktop>set /a -9^&5 5

为什么写成^&?

跟前面的求余数运算符是一样的道理,由于&符比较特殊,所以需要转义(%必须由%转义,&必须要^转义)。

9和5、-9和5按位与的结果分别为1,5,Why?

位运算就是要用10进制数对应的二进制补码进行运算,然后再将运算得到的二进制补码换算成10进制数输出。 9: 0000 1001 &

5: 0000 0101 --------------------- 1: 0000 0001

-9:1111 0111 &

+5:0000 0101 --------------------- +5:0000 0101 按位与运算,就是“同真为真,其余为假”,在同一位上都是1运算结果才是1,其余都是0。

2.按位或 运算符(|)

“|”符号在set /a 之外还有“管道”的用法,但是在set /a 中它只是按位或(由于|符号的特殊性,在运用时也要在前面加转义符——^|)。 C:\\Users\\helloworld>set /a 5^|9 13

C:\\Users\\helloworld>set /a 5^|-9 -9

9: 0000 1001 |

5: 0000 0101 --------------------- 13: 0000 1101

-9:1111 0111 &

+5:0000 0101

--------------------- -9:1111 0111

按位或运算,就是“一真便真,全假才假”,同一位上只要一个是1,那结果就是1,只有全部是0,结果才是0.

结合前面的按位与(&)运算来看,其实按位与(&)和按位或(|)就是一种比较运算,比较同一位上的0或1的异同,得出结果。

3.逻辑移位

逻辑移位运算符有两个:<< ,>>,分别表示向左移位,向右移位。

向左移位(<<)

C:\\Users\\helloworld\\Desktop>set /a 9^<^<2 36

9: 0000 1001 << 2

--------------------- 36: 0010 0100

把二进制补码向左移动两位(不足的在右边补零),然后换算成10进制数得出结果(向左移是将数变大)。

语法:set /a 被移数<<移位数

计算公式:结果=被移数*(2的移位数次方) 例如:9<<2 == 9*(2的2次方) ==36

向右移位(>>)

C:\\Users\\helloworld\\Desktop>set /a 9^>^>2 2

9: 0000 1001 >> 2

--------------------- 2: 0000 0010

把二进制补码向右移动两位(多余的剔除——这里剔除了最后一个1),然后换算成10进制数得出结果(向右移是将数变小)。

语法:set /a 被移数>>移位数

计算公式:结果=被移数/(2的移位数次方)

例如:9>>2 == 9/(2的2次方) == 2

逻辑移位运算符的特性可以加以利用,来计算数值的偶数倍、偶数半: 比如 9 的 2倍,即 Set /a 9^<^<1 比如 9 的 1/2,即 Set /a 9^>^>1

4.按位异或运算符(^)

按位异或运算符也是个特殊符号(转义符),所以在使用的时候也要转义(^^)。 C:\\Users\\helloworld\\Desktop>Set /a 9^^5 12

C:\\Users\\helloworld\\Desktop>Set /a -9^^5 -14

9: 0000 1001 ^

5: 0000 0101 --------------------- 12: 0000 1100

-9:1111 0111 ^

+5:0000 0101 --------------------- -14:1111 0010

按位异或运算,就是“不同为真,相同为假”,相同位都是1或都是0,结果就是0,其余结果都是1.

5.复合位运算

结合前面的复合算术运算符和位运算符,复合位运算就不难理解。 例如:(&=)运算符 @echo off Set n1=9

Set /a n1^&=5 echo %n1% pause

结果为1。

所以,“n1^&=5”就相当于“n1=n1^&5”(“&”需要转义)。

同理,“ n1^^=5”就相当于“n1=n1^^5”;\就相当于“n1=n1^|5” \就相当于“n1=n1^<^<2”.

位运算就在这里结束了,其中“! ~ - ”这三个 “一元运算符”都没有讲解。

6.逗号运算符

如果两个变量的值都是数字,而不是字符串,就可以用set /a 中的逗号运算符一次性赋值。 例子: @echo off

Set /a a1=5,a2=5 echo ?% ¢% pause

结果: 5 5

如果变量值是字符串,用这种方法就会出错。 例如: @echo off

Set /a a1=5,a2=5a echo ?% ¢% pause

结果:无效数字。数字常数只能是十进制(17),十六位进制(0x11)或八进制(021)。 5

只输出了a1的值,a2没有输出,因为a2的值是字符串。

看起来像字符串的16进制数。 例如: @echo off

Set /a a1=5,a2=0x15 echo ?% ¢% pause

结果: 5 21

“0x15”中0x是16进制数前缀(等于10进制数21)。 \中0是8进制数前缀(等于10进制数13)。

49.reg

例子:

增加系统启动项(一般是把文件拖到开始菜单——程序——启动,实现开机自启动;删除开机启动一般是在 msconfig /4 中设置)

@echo off

echo 修改系统启动项

set /p girl=输入要添加的程序的名称:


批处理常用命令及用法大全(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:钻孔反循环灌注桩施工工艺

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: