赞
踩
欢迎关注「全栈工程师修炼指南」公众号
设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习!
专注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章 等知识分享
“ 花开堪折直须折,莫待无花空折枝。 ”
作者主页:[ https://www.weiyigeek.top ]
博客:[ https://blog.weiyigeek.top ]
作者<安全开发运维>答疑交流群,回复【学习交流群】即可加入
原文链接: 运维必学 | 运算符优先级-从零开始学Windows批处理(Batch)编程系列教程
文章目录:
本文为作者原创文章,为尊重作者劳动成果禁止非授权转载,若需转载请在【全栈工程师修炼指南】公众号留言,或者发送邮件到 [master@weiyigeek.top] 中我将及时回复。
0x00 批处理(Batch)中特殊符号
描述: 在Windows的DOS命令或者Batch批处理中提供了许多的特殊符号,给脚本开发提供了许多遍历,下面我们就来看看批处理中特殊符号。
描述: 主要将输出信息重定向到指定的设备或文件,系统默认输出到显示器。
使用示例:" > "
:如果文件a.txt本来已经存在,该命令将首先擦除a.txt中的所有信息,然后写入信息 weiyigeek ;若a.txt本来就不存在,该命令即可新建一个a.txt文件,并写入信息 weiyigeek .
" >> "
:则是向原文件中末尾继续追加字符串或者值,不会覆盖已有数据。
- @echo off
- echo weiyigeek > a.txt
- echo weiyigeek.top > a.txt
- :: 输出数字到 a.txt 文件中
- echo 1024 > a.txt
- :: 显示 a.txt 文件中的数据
- type a.txt
- pause
温馨提示: 因为数字的特殊性,在echo输出数字时请在后面加上空格。
描述: 将输入信息来源重定向为指定的设备或文件,系统默认从显示器读取输入信息。
- @echo off
- echo 请任意输入字符以回车结束
- set /p ifo=
- echo "欢迎关注【全栈工程师修炼指南】公众号,作者 WeiyiGeeker" > a.txt
- echo 【从屏幕获得的输入信息 】
- echo %ifo%
- :: 将a.txt文件重定向输入到ifo变量中
- set /p ifo=<a.txt
- echo 【 从文件a.txt获得的输入信息 】
- :: 输出从文件中读取的字符串
- echo %ifo%
- pause
观察命令与输出即可体会到重定向的功能和效果
描述: |
是一个管道传输命令,意思是将上一命令执行的结果传递给下一命令去处理。
此命令前加上 echo y
并用管道传输符|
将echo执行的结果y传递给choice命令,从而达到手工输入Y的效果.
- @echo off
- echo y|choice /C yn /M "看友,你是否关注了【全栈工程师修炼指南】公众号!"
描述: ^
是对特殊符号 > 、<、 &的前导字符, 在命令中它可以将以上的3个符号的特殊动能去掉,仅仅只吧他们当成符号输出而不使用他们的特殊意义。
- # 示例1.转义特殊字符串
- @echo off
- echo ^|
- echo ^&^&
- echo ^<
- echo ^<<
-
- # 示例2.从下面结果可以看出并没有把test写入文件1.txt而是将test >1.txt 当字符串显示了出来, 此符号在远程构建批处理的时候很有效果。
- echo test ^> 1.txt
- # test > 1.txt
-
- # 示例3.使用%字符改变特殊字符属性,此处使用%去掉%字符的调用变量属性,即输出%%1。
- echo %%1 = %1
偷偷的告诉你哟?【极客全栈修炼】微信小程序已开放
可直接在微信里面直接浏览博主文章哟,后续将上线更多有趣的小工具。
0x01 批处理(Batch)中逻辑命令符
描述: 批处理中逻辑命令符包括"&" / "&&" / "||"
, 其解释如下:
" & "
: 它的作用是用来连接n个DOS命令,并把这些命令按顺序执行,而不管是否有命令执行失败;
" && "
: 当前面的命令成功执行时,执行&&;后面的命令,否则不执行;
" || "
: 当前面的命令失败时,执行||后面的命令,否则不执行。
- # 示例1.依次执行命令
- whoami & dir /b & net user
-
- # 示例2.此处没有正确执行 time /t 由于前面得命令没正确执行
- date /t && @who && time /t
-
- # 示例3.要么第一个执行后面都不执行,要么前面都没正确执行,后面才执行
- date /t || who || time /t
- w || who || time /t
综合示例:
- @echo off
- echo ^&
- reg delete HKCU /v try /f & echo **也许成功**
- reg delete HKCU /v try /f & echo **也许失败**
-
- echo ^&^&
- reg delete HKCU /v try /f && echo **成功**
- reg delete HKCU /v try /f && echo **失败**
-
- echo ^|^|
- reg add HKCU /v try /f || echo **失败**
- reg add HKCU1 /v try /f || echo **成功**
- pause
0x02 批处理(Batch)中运算符及优先级
描述: 在Windows批处理脚本中,主要是使用 set 命令
(set /a expression
) 来进行运算,批处理中的变量是不区分类型的,不需要像C语言中的变量那样还要区分int、float、char等,例如 a=234
也可以是int,也可以说char。
在介绍批处理运算符之前,我们先来看看有哪些运算符以及其优先级层次, 下述优先权逐步递减:
- () : 分组
- ! ~ - : 一元运算符
- * / % : 算数运算符
- + - : 算数运算符
- << >> : “逻辑移位” #双引号
- & : 按位“与”逻辑 #双引号
- ^ : 按位“异”逻辑 #双引号
- | : 按位“或”逻辑 #双引号
- = *= /= %= += -= : “赋值”
- &= ^= |= <<= >>= # 双引号
- , :“表达式分隔符”
温馨提示: 对于"逻辑或取余操作符", 我们需要把他们用双引号引起来, 否则会报错!
描述: () 其优先级最高。
- C:\Users\WeiyiGeek>set /a tt=2*(1+3)
- 8
示例演示
- set /a tt=!0 // 取反 [ 1, 0]
- set /a tt=~0 // -1 + ( -n ) ,假如 ~1 则为 -2
- set /a tt=-1 // 表示负号
亲,文章就要看完了,不关注一下【全栈工程师修炼指南】吗?
示例演示
- # 左移 -> 2^n , 后面的数值就表示2的几次方
- set /a tt=3"<<"2 # 3*(2**2) = 12
- set /a tt=3"<<"3 # 3*(2**3) = 24
-
- # 右移 -> 1/(2^n)
- >set /a tt=15">>"2 # 注意其数值不会四舍五入会取整。15/(2**2) = 15/4 = 3.75 = 3
- >set /a tt=12">>"2 # 12/(2**2) = 3
- >set /a tt=8">>"2 # 8/4 = 2
示例演示:
- # 与 & 一假必假
- set /a tt = 1 "&" 0 # 0
- set /a tt = 1 "&" 1 # 1
-
- # 或 | 一真必真
- set /a tt = 1 "|" 0 # 1
- set /a tt = 0 "|" 0 # 0
- set /a tt = 0 "|" 1 # 1
-
- # 异或 ^, 相同则假 False, 不同则真 True
- set /a tt =1"^"1 # 0
- set /a tt =1"^"0 # 1
- set /a tt =0"^"0 # 0
示例演示:
- # 示例1,注意=后操作数之间无空格
- set a=1 # a=1
- set /a a*=2 # a=a*2 = 2
- set /a a*=3 # a=a*3 = 6
- set /a a-=3 # a=a-3 = 3
- set /a a+=3 # a=a+3 = 6
- set /a a/=3 # a=a/3 = 2
- set /a a%=2 # a=a%2 = 0
-
- # 示例2
- set a=1
- set /a a&=1
- # 6'1' 不是内部或外部命令,也不是可运行的程序,注意,不加双引号得时候会报错
- set /a a"&=1 # 1
- set /a a"&="1 # 1
- set /a a"&="2 # 2
- set /a a"&="0 # 0
- # 示例3
- set a=0
- set /a a"&="2 # 0
- set /a a"|="2 # 2
- set /a a"|="0 # 0
- set /a a"^="0 # 0
- set /a a"^="2 # 2
- # 示例4
- set a=2
- set /a a"<<="4 # 1 * (2**4) = 16
- # 示例5,可以运算多个variable的值,用“,”分割符号分割
- set /a a=1+1, b=2*3, tt+=1
- 1
- echo %a% , %b% , %tt%
- 2 , 6 , 1
本文至此完毕,更多技术文章,尽情等待下篇好文!
原文地址: https://blog.weiyigeek.top/2023/6-25-753.html
如果此篇文章对你有帮助,请你将它分享给更多的人!
学习书籍推荐 往期发布文章
回复【0008】获取【Ubuntu22.04安装与加固脚本】
回复【10001】获取【WinServer安全加固脚本】
回复【10002】获取【KylinOS银河麒麟安全加固脚本】
回复【0011】获取【k8S二进制安装部署教程】
回复【0014】获取【Nginx学习之路汇总】
回复【0015】获取【Jenkins学习之路汇总】
回复【10005】获取【adb工具刷抖音赚米】
热文推荐
欢迎长按(扫描)二维码 ,获取更多渠道哟!
欢迎关注 【全栈工程师修炼指南】(^U^)ノ~YO
添加作者微信【weiyigeeker】,拉你一起学习交流吧!
关注回复【学习交流群】即可加入【安全开发运维沟通交流群】
温馨提示: 由于作者水平有限,本章错漏缺点在所难免,希望读者批评指正,若有问题或建议请在文章末尾留下您宝贵的经验知识,或联系邮箱地址 master@weiyigeek.top 或 关注公众号 [全栈工程师修炼指南] 留言。
朋友点个【赞 + 在看】吧!
点击【"阅读原文"】获取更多有趣的知识!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。