admin管理员组文章数量:1647851
3.1批处理
3.1.1批处理简介
什么是批处理?
- 批处理其实就是一个脚本文件
- 在这个脚本文件中是包含很多要批量、依次执行的命令的
- 这样的脚本文件就是批处理文件、
换句话讲,就是通过控制台将一些命令进行集中处理达到更快的工作效率,在控制台直接输入虽然很方便,但当进行大量命令处理单用控制台写命令就显得有些力不从心。因此要用到批处理 方式进行大量命令处理。
脚本是什么?
脚本就是文本文件,在文件中包含了多个要执行的命令(如下图)
批处理的作用:
批量、自动、定时去执行一些操作
写批处理文件的方法:
第一步:创建一个文本文件【后缀是txt的文件】
第二步:在文本文件中写入要自动执行的dos命令,然后保存退出
第三步:将这个文件的后缀修改为.bat
修改之后如下图
一个脚本创建完成,我们双击打开他看一下
会看到我们的hellow word。那这个脚本就可以正常使用了
注意事项:
有些时候可能不显示后缀,这个时候我们就需要通过打开此电脑,点击查看选项,勾选文件拓展名来显示文件拓展名方便进行修改。(如下图)
3.2dos命令
3.2.1 echo命令
作用:
输出一段信息
方法一
举例:
输出“hello word”
echo helloword
通过上面的语句可以输出hellowword(结果如下图)
方法二
另外,echo可以用来拼接字符串
echo "hello""word"
输出结果如下图
运行成功。
ps:echo可以输出字符串,也可以输出变量中的值
3.2.2 变量和set命令
变量是什么?
举个例子,我们坐出租车,假如一公里五块钱,坐了三公里要付给司机十五块钱,坐了六公里要付给司机三十块钱,那么在付钱的过程中,一公里五块钱不变,变的是他行进几公里和相应的价钱。而后者则是变量。而行进公里数则是自变量,价格则是因变量。
变量分两种:
- 用户自己定义的,也就是用set定义的
- 系统自动生成的,这种不需要用户set,可以直接使用
变量中包含什么?
两个部分:
变量的名字
变量中保存的值
定义变量的格式:
set 变量名=变量值
ps:
- 这里需要用set标识符来定义变量和赋值 "="号之间的空格格式要求严格,标识符后不要有空格!
- 例如定义一个变量,变量名是name,变量的值是tom,也可以是ailisi,admin
- 再定义一个变量,变量名是age,变量的值 是18,也可以是19,20,21
使用变量的格式
既然我们了解了怎样定义变量,那如何使用呢?
%变量名%
答:通过%echo%变量名进行输出
举个例子
定义变量保存姓名和年龄
set name=tom set age=18 echo %name%今年%age%岁了
我们来看看输出
我们可以看到输出结果是一堆乱码,这是因为有些时候命令提示符无法识别中文,我们就需要在前面增加chcp 65001来使它进行识别
chcp 65001 set name=tom set age=18 echo %name%今年%age%岁了 pause
来看结果
完成
ps:使用变量的时候,需要给变量前后百分号%。
3.2.3关闭/打开回显
回显是什么
其实就是在执行批处理文件的时显示批处理文件中的命令。直接下翻看图更能清晰直观
打开回显
显示批处理文件中的命令。【默认就是打开回显的】
打开回显的命令:
@echo on
(打开回显状态如下图)
关闭回显
不显示处理文件中的命令
关闭回显的命令:@echo off
@echo off
(直接上图)
可以看到少了很多处理文件中的命令,这个就是回显
echo命令的第二种用法
echo message
这个很简单,就是显示后面的信息,这里不做演示
echo message
echo 命令第三种用法:
显示当前回显设置状态,就是显示回显打开或关闭
ps:echo也可以输出文件
3.2.4 查看当前路径
这个工作可以通过内置变量来做
内置变量:
在系统中自动已经定义的变量
%cd%
%cd% 或者 %~dp0
echo %cd% echo %~dp0
直接上图
此为当前bat所处于的文件夹
ps:内置变量并非dos命令,只是恰巧相似!!!!!
补充:
%time%
3.2.5 REM
rem注释
注释的内容,就是一个解释信息【注释的内容是不会当做程序来运行】
rem作用
作用1:將脚本中某一行或者多少设置为不执行
作用2:解释脚本中的每行内容是作用
直接上图
rem
命令执行没有输出“HELLO WORD”
执行成功
ps:
- 可以用"::"代替"REM"
- ::可以提高执行速度,但是REM的兼容性更好
- 建议大家用rem注释
3.2.6 pause
作用是将DOS界面暂停关闭来达到中止命令的效果
3.2.7 title
用来设置控制台的标题
直接上图
title ch225 pause
完成!
3.2.8中文乱码解决方案
方法一
使用 chcp 65001 命令行
chcp 65001
前面已经演示过了,不做赘述。
注意事项:
在执行程序的时候,中文的内容必须在 chcp 65001 下面,否则无法解决乱码问题
方法二
将bat文件使用txt编辑,然后另存为时选择 ANSI 编码格式
3.2.9 start
用于调用其他程序,如可执行文件exe
start qq.exe
通过此代码可以打开QQ,演示结果不做展示
ps:
- qq.exe需要和批处理文件在同一个目录中,是为了方便
- 也可以将qq.exe放到任意位置,但是在执行的时候,就必须加上路径
- start在启动的时候,可以启动exe程序,也可以启动bat,rar,xsl等文件格式。
3.2.10 读取dos输入
简单来说就是由后台定义自变量,控制台去定义因变量,例如账户密码,用户输入的不是账户,而是自己的账户名称
作用:
- 与用户交互:用户可以进行输入,系统会进行输出
- 此时需要将用户输入的内容保存成一个变量,这里需要用到set标识符,还有参数/p
set /p
上例子,
创建一个输入姓名和年龄的交互系统
echo "程序开始执行" set /p name=请输入你的姓名 set /p age=请输入你的年龄 echo 你的姓名是:%name% ,你的年龄是:%age% echo "程序执行结束" @echo on pause
成品如下述视频
1709735747297
测试完成。
3.2.11函数
我们通过上面的命令已经可以写一些小程序了,但是很多程序经常会重复使用,如果通过上述指令一条条进行不仅会效率低下,而且还会容易出错,因此,为了提高代码使用率,我们可以通过函数来提高工作效率,减小工作误差。那么什么是函数呢?
什么是函数
- 函数本质就是一段代码
- 通过使用函数,可以实现代码的重复使用,进而可以提高程序的开发效率
(换句话来讲就是给某一段代码进行命名方便进行引用)
定义函数格式
一般来讲函数格式分为三部分
- :函数名
- 函数体
- goto:eof
- 通常函数内容都是以:函数名称开始,以goto:eof结束
举例
(下图为一个函数)
:fun1 echo hello boys pause goto:eof
上图函数的作用是输出hell boys
看结果
因为在程序中单独函数的goto:eof会直接跳转到程序的最后一行导致结束程序,因此我在中间加了一个pause命令用来暂停函数。
函数的调用方法:
我们已经在上述小结中做出了一个函数,那我们应该如何调用呢
调用函数就是
call:函数名 ... goto:eof
话不多说直接演示
call:fun1 goto:eof :fun1 echo hello boys pause goto:eof
来看结果
成功。
那我们将call:fun1下面的goto:eof删除会出现什么情况?
直接上操作
call:fun1 :fun1 echo hello boys pause goto:eof
代码如上图,看结果
可以看到,删除goto:eof函数之后函数会被执行两次这也是函数的一个特点。
因此,在批处理中,函数的位置,通常都是放到程序的末尾,这是因为批处理的函数会被自动执行 但是在其他的编程语言中,函数的位置可以在开头也可以末尾
另外,goto:eof 函数写的位置不一样,效果也不同,这里我们会在goto中专门去做笔记,这里不多阐述。
批处理函数的特点:
- 批处理的函数在定义以后,是会被自动执行的
- 【一定要注意,在各种编程语言,只有批处理的函数会被自动执行,其他的编程语言中的函数,必须 手动调用执行】
- 同样的原因,在批处理中,函数的位置,通常都是放到程序的末尾,这是因为批处理的函数会被自动执行。如果不进行此操作,在重复调用的时候,容易出现函数执行了一次,程序就结束的现象, 但是在其他的编程语言中,函数的位置可以在开头也可以末尾。
举例
call:fun1 :fun1 echo hello boys pause goto:eof call:fun1 pause
看演示结果
可以看出理论上应该调用三次函数的程序但只调用了两次就结束了,因此将函数部分写在最后即可
3.2.12goto
前面已经用了很多次了,goto函数的作用就是用于函数和主程序的跳转,通常写法都是goto:eof
注意:goto:eof写的位置不一样,效果也不相同,
- 如果写在函数中,goto:eof 是用于终止函数运行
- 如果写在主程序中,goto:eof 是用于终止整个程序的运行
举例
call:a call:a call:a pause goto:eof :a echo hello world echo hello world11 goto:eof echo hello world12
看结果
可以看到输出三次a函数,但没有输出word12,这是因为word12上面的goto:eof使当前执行函数结束然后接着上一条调用去执行命令,以此类推到第五行之后主程序函数中的goto:eof命令终止了整个程序的运行,所以没有去显示最后一条命令。
3.2.13 call
用于调用函数,也可以调用别的bat脚本
在函数调用已做解释,这里不做说明
3.2.14 errorlevel
是脚本内置变量,可以检测上一个命令是否执行成功,一般用于进行程序使用
- 如果这个变量的值等于0,表示上面命令执行成功
- 如果这个变量的值不等于0,表示命令执行失败
上实例:
@echo off echo 2 echo %errorlevel% pause
输出结果
当出现0时,则表示上面程序运行成功
来个不是0的案例
@echo off set /p cho= ping %pingcho% >nul echo %errorlevel% pause
我们随便输入字母,
来看结果:
结果是1,证明命令错误,完工!
3.2.15 if判断
我们已经通过上面所表述的命令可以做出一个简易的登陆系统,接下来我们如何去让系统去识别所登陆的用户账号密码是否正确呢,这个时候就要用到if判断了
什么是if判断
顾名思义,就是判断变量值和变量名是否一致,一致的话做出一类操作,不一致的话做出另一类操作,具体语句如下。
if判断类型
第一种:判断数值:
- 判断两个数是否相同
- 判断两个数字的大小
判断数字用的格式
EQU - 等于 NEQ - 不等于
LSS - 小于 LEQ - 小于或等于
GTR - 大于 GEQ - 大于或等于
第二种:判断字符串
判断字符串相同 或者 不相同
判断字符串用的格式
== 等于
判断的格式1:
单分支
if 判断条件 ( 当条件成立的时候执行的代码 )
简单来说就是当条件成立时,执行括号里面的代码,当条件不成立时则不做任何动作。
例子
@echo off chcp65001 set /p age= if %age% GEQ 18 ( echo 已成年 ) pause
我们输入12试试看
显示输出12,
那我们输入19
显示已成年,这就是单分支if函数
判断的格式2:
双分支
上个例子输入18以下只显示数字,那怎样在用户输入十八岁以下显示未成年,十八岁以上显示成年呢?这个时候就要用到多分支if了
if 判断条件 ( 当条件成立的时候执行的代码 )else ( 当条件不成立的时候执行的代码 )
跟单分支不一样的是多一个分支,也就多了一个选择。直接上例子
@echo off chcp 65001 set /p age=请输入年龄: if %age% GEQ 18 ( echo 已成年 ) else ( echo 未成年 ) pause
可以看到多了一个else命令,用来判断是否成年。若成年输出已成年,反之输出未成年
输入12,未成年
输入18,已成年。
完工!!
还没完:(另外还有if多分支格式,通常用于做一些六十分及格七十分良好之类的考试等级评级,这里不做演示!!)
3.2.16 for循环
什么是for循环?
简单来说就是将下面的代码跟上面的代码连起来进行循环运行,直到实现目标结果为止
for循环格式
for /l %%变量名 in (start, setp, stop) do ( echo %%变量名 )
我们来一个一个解释循环里面的东西,第一行那个%%i是变量名,后面括号的start是开始的意思,setp是步长的意思,stop是结束的意思,用跑步来解释,开始就是从起点出发,步长是你一下子跑几米,结束就是到达终点;那到达终点后我们则需要去看到排名,在这里就是echo里面的%%变量名了。
多说无益,直接举例:
@echo off chcp 65001 for /l %%i in (1, 1, 100) do ( echo %%i ) pause
我们跑一个这个代码,这个代码的意思是给变量名i里面整一个1,让他每次往上+1,每次加一输出一次,加到一百为止,跑一下看看
可以看到跑成了,那么就表示这个循环没问题
(因为笔者电脑里控制台总不乖,所以无法去演示for循环里面的其他东西,因此请各位见谅)
因此将常用的几个循环放在下面
其他for/dor类型
- dir /b 指定目录 这个语法可以用于获得指定目录下的所有文件和文件夹
- for /f 遍历指定目录下所有的文件和文件夹
- for /d 遍历指定目录下所有的文件夹
- for /r 遍历指定目录下所有的文件和子文件夹中的文件
- %%i 则是声明的变量,可以是任意的变量名,但变量名前面必须加上两个百分号%
3.2.17 输出重定向
输出重定向是什么
正常情况下,执行命令的时候,命令的输出结果在显示器上进行输出,这个叫做标准输出 通过>> 可以将本来显示在显示器上的内容保存到一个文件中,这就是输出重定向
输出重定向的两种用法及四种结果:7
1.>
如果文件不存在,可以创建一个新的文件,然后将命令的执行结果保存到文件中
如果文件已存在,那么就会将文件的原有内容删除,然后将命令的执行结果保存到文件中
2.>>
如果文件不存在,可以创建一个新的文件,然后将命令的执行结果保存到文件中
如果文件已存在,然后将命令的执行结果保存到文件中原有内容的后面
3.2.18 屏蔽命令的输出
可以清除一些不必要的命令
命令的输出结果有两种情况:
- 命令执行正确的输出
- 命令执行错误的输出
使用方法
nul 称之为黑洞文件,任何内容重定向黑洞文件后,都会消失
>nul 的使用场景:是将哪些 不需要显示在显示器上,也不需要保存的信息给清除掉
举例:
@echo off rem 让用户输入提供ip地址,判断当前网络中,是否有这个ip set /p ip=请输入ip地址: ping %ip% -w 1 -n 1 >nul echo %errorlevel% pause
看结果
可以看到ping结果消失,那是因为>nul将数据屏蔽了
完工,下一个
接下来的命令仅作了解
3.1.19bat中的字符串操作
字符串中是否包含某个字符串
代码
echo 字符串 | findstr 子字符串 >nul && ( 包含时的情况 )
3.1.20copy
可以复制文件或者文件夹
命令
c: cd / copy a.txt b.txt >nul
3.1.21 del
可以删除文件,自行测试
- del /f 强制删除只读文件
- del /s 从所有的目录下删除指定文件
- del /q 安静模式
- 案例:(删除test.txt文件)
@echo off title this is a test :fun_main del /f /s /q test.txt >nul pause goto :eof
以上就是笔者整理的关于批处理的一些知识了,如果有问题还请评论区多指教,感谢观看!!
版权声明:本文标题:网络安全快速入门(三)windows批处理 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1729490912a1202512.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论