例子#想当红客的黑客#红客#黑客#网络安全
没错!就是屏幕前的你!中国有句古话说得好:学武先学德 漫威里面班叔叔对彼得帕克临死前说得一句话:能力越大,责任越大!从而成就了蜘蛛侠,而你 !我的朋友!就是网络世界里的蜘蛛侠,惩恶扬善吧!点击进来,该让我们正式进入主题了。
hole,baby们。今天又是你们啊,咱们的感情和知识越来越深了嗷!希望明天还是你们,希望以后也是你们,作为我的同学;作为我的超级英雄;还是我老baby,我想天天能见到你们。好了好了,让我们回忆一下咱们上次的美好记忆吧。上次咱们学到了windows 的常用的dos命令和虚拟机是什么还有虚拟机的安装,写文章-CSDN创作中心 这是上节课咱们学的内容,忘记的同学可以再复习一下。这节课咱们要学的内容是windows的批处理操作,有的同学可能就要问了,啥是批处理啊?好,别急这就给大家讲一下。
四、windows批处理
4.1批处理简介
批处理是一种计算机操作系统中的命令处理技术。它是通过编写一系列的命令脚本,将这些脚本存储在一个文件中,然后一次性执行这些命令,从而自动化完成一系列的操作任务。
批处理通常用于简化重复性的任务,例如批量重命名文件、批量复制文件、批量删除文件等。通过批处理,用户可以通过一次性运行整个脚本来完成这些任务,而无需逐个手动执行每个命令。
批处理脚本可以使用命令行指令、条件语句、循环语句等,可以实现复杂的逻辑判断和任务流程控制。批处理还可以使用变量来存储临时数据,以便在脚本中进行使用。
批处理脚本通常以扩展名.bat或.cmd保存,在Windows操作系统中使用较为广泛。
说白了,批处理其实就是一个脚本文件
在这个脚本文件中是包含很多要批量、依次执行的命令的这样的脚本文件就是批处理文件
批量、自动、定时去执行一些操作
第一步:创建一个文本文件【后缀是txt的文件】
第二步:在文本文件中写入要自动执行的dos命令,然后保存退出
第三步:将这个文件的后缀修改为.bat
脚本就是文本文件,在文件中包含了多个要执行的命令
c:
cd \
md a010
md a011
md a012
echo "over."
pause
4.2 DOS命令
1)ECHO
输出一段信息
echo hello world
pause
echo可以用来拼接字符串
1)没有变量
echo "hello" "world"
pause
案例:用echo将hello 字符串和world字符串拼接到一起,然后进行输出
2)变量
变量中包含两个部分变量的名字变量中保存的值
set 变量名=变量值
这里需要用 set 标识符来定义变量和赋值"="号之间的空格格式要求严格,标识符后不要有空格!例如定义一个变量,变量名是name,变量的值是tom;再定义一个变量,变量名是age,变量的值是18
set name=tom
set age=18
使用变量的格式
%变量名%
echo可以输出字符串,也可以输出变量中的值
使用变量的时候,需要给变量前后百分号%。
案例:定义变量保存姓名和年龄,用echo进行输出【其实这个就是拼接有变量的字符串】
set param1=hello
set param2=world
echo %param1%%param2%ok
pause
使用变量的时候,需要给变量前后百分号%。
3)关闭/打开回显
- 回显:
- 其实就是在执行批处理文件的时显示批处理文件中的命令
- 打开回显:
- 显示批处理文件中的命令。【默认就是打开回显的】
- 打开回显的命令:@echo on
- 关闭回显:
- 不显示处理文件中的命令
- 关闭回显的命令:@echo off
echo "======执行下面的命令的时候,有回显=======" 1
ECHO:何为回显?打开回显就是执行命令时会把命令显示出来,关闭回显反之.
显示信息,或将命令回显打开或关上。
echo 命令的第一种用法:echo on 和 echo off
echo on表示打开回显
echo off表示关闭回显
echo 命令的第二种用法:echo message
这个很简单,就是显示后面的信息
echo 命令第三种用法:
显示当前回显设置状态,就是显示回显打开或关闭
echo也可以输出文件
4)印当前路径
可以借助内置变量
内置变量:在系统中自动已经定义的变量
%cd% 或者 %~dp0
set age=18
echo %age%
pause
@echo off
echo "======从这里开始就没有回显了========="
set age=18
echo %age%
pause
@echo on
echo "======从这里开始又有回显了========="
set age=18
echo %age%
pause
- ECHO:何为回显?打开回显就是执行命令时会把命令显示出来,关闭回显反之.
- 显示信息,或将命令回显打开或关上。
- echo 命令的第一种用法:echo on 和 echo off
- echo on表示打开回显
- echo off表示关闭回显
- echo 命令的第二种用法:echo message
- 这个很简单,就是显示后面的信息
- echo 命令第三种用法:
- 显示当前回显设置状态,就是显示回显打开或关闭
- echo也可以输出文件
4)印当前路径
- 可以借助内置变量
- 内置变量:在系统中自动已经定义的变量
- %cd% 或者 %~dp0
@echo off
title this is a test
echo %cd%
echo %~dp0
pause
5)REM
- rem 注释
- 注释的内容,就是一个解释信息【注释的内容是不会当做程序来运行】
- 作用1:將脚本中某一行或者多少设置为不执行
- 作用2:解释脚本中的每行内容是作用
- 注意:
- 可以用"::"代替"REM"
- ::可以提高执行速度,但是REM的兼容性更好
- 建议大家用rem注释
@echo off
rem echo "程序开始执行"
echo "lelelele"
echo "程序执行结束"
@echo on
pause
6)pause
作用是将DOS界面暂停关闭
7)title
用来设置dos的标题
@echo off
title 我的第一个案例
rem echo "程序开始执行"
echo "lelelele"
echo "程序执行结束"
@echo on
pause
8)中文乱码解决方案
- 方法1:使用 chcp 65001 命令行
@echo off
chcp 65001
title this is a test
echo 哈哈哈
pause
注意事项
在执行程序的时候,中文的内容必须在 chcp 65001 下面,否则无法解决乱码问题
例如这个例子可以解决乱码
@echo off
chcp 65001
echo 哈哈哈
pause
例如这个例子无法解决乱码
@echo off
echo 哈哈哈
chcp 65001
pause
- 方法2:将bat文件使用txt编辑,然后另存为时选择 ANSI 编码格式
9)start
用于调用其他程序,如可执行文件exe
@echo off
title this is a test
start qq.exe
@echo on
pause
- 这个案例就可以启动qq
- 注意
- qq.exe需要和批处理文件在同一个目录中,是为了方便
- 也可以将qq.exe放到任意位置,但是在执行的时候,就必须加上路径
- start在启动的时候,可以启动exe程序,也可以启动bat
10)读取dos输入
- 与用户交互:用户可以进行输入,系统会进行输出
- 此时需要将用户输入的内容保存成一个变量,这里需要用到set标识符,还有参数/p
格式是:set /p 变量名=提示语等
@echo off
chcp 65001
title 我的第一个案例
rem echo "程序开始执行"
set /p name=请输入你的姓名
set /p age=请输入你的年龄
echo 你的姓名是:%name% ,你的年龄是:%age%
echo "程序执行结束"
@echo on
pause
案例:让用户输入一个ip地址,检查和这个IP是否在线
@echo off
chcp 65001
title 检查指定的IP是否可以通信
set /p ip=请输入IP地址:
ping -n 1 -w 1 %ip%
@echo on
pause
11)函数
什么是函数函数本质就是一段代码通过使用函数,可以实现代码的重复使用,进而可以提高程序的开发效率
定义函数的格式
:函数名
函数体
goto:eof
函数内容是以 :函数名 开始以 goto:eof 结束
函数的调用方法
call:函数名
...
goto:eof
调用函数就是 call:函数名
@echo off
rem 调用函数【等待函数执行完成以后,才会执行后面的代码】
call:fun1
goto:eof
rem 如果没有这个goto的话,那么下面的函数会被执行两次
rem 定义了一个函数
:fun1
echo hello boys
goto:eof
批处理的函数在定义以后,是会被自动执行的【 一定要注意,在各种编程语言,只有批处理的函数会被自动执行,其他的编程语言中的函数,必须 手动调用执行 】
案例:
@echo off
chcp 65001
call:showInfo
call:createFile
goto:eof
:createFile
@echo off
c:
cd \
md new00
md new111
md new222
@echo on
:showInfo
@echo off
echo "当前路径是: %cd%"
echo "当前用户名:administrator"
echo "当前时间:%time%"
@echo on
@echo on
pause
在批处理中,函数的位置,通常都是放到程序的末尾,这是因为批处理的函数会被自动执行但是在其他的编程语言中,函数的位置可以在开头也可以末尾
思考问题:下面的ccc会不会被输出
@echo off
rem 调用函数【等待函数执行完成以后,才会执行后面的代码】
call:fun1
goto:eof
rem 定义了一个函数
:fun1
echo aaaa
echo bbbb
goto:eof
echo cccc
改写版本
@echo off
echo 0000
pause
call:fun1
echo 11111
pause
goto:eof
echo 2222
rem 定义了一个函数
:fun1
echo aaaa
echo bbbb
pause
goto:eof
echo cccc
pause
pause
@echo on
案例1:
@echo off
call:myfunc
pause
goto:eof
:myfunc
echo hello world
goto:eof
函数要写在程序的最后,否则在重复调用函数的时候,容易出现函数执行了一次,程序就结束的现象,如下例:执行正常的程序 【将函数部分写在最后】
@echo off
call:myfunc
call:myfunc
call:myfunc
pause
goto:eof
:myfunc
echo hello world
goto:eof
【函数一定要放到goto:eof的后面,否则函数就会被多执行一次】
@echo off
:myfunc
echo hello world
goto:eof
call:myfunc
call:myfunc
call:myfunc
pause
goto:eof
@echo off
chcp 65001
color 1b
echo ---------------------------------------------------------------
echo "1:用户登录"
echo "2:用户注册"
echo "3:退出系统"
echo ---------------------------------------------------------------
set /p cho="请选择你的操作类型[1|2|3]:"
echo 你的选择是:%cho%
pause
- bat是串行执行命令行,所以如果没有命令控制,bat会将所有的命令行和函数从上到下全部执行
案例:通过函数让,让用户输入三次姓名和年龄
@echo off
color 0a
call:fun1
call:fun1
call:fun1
pause
goto:eof
:fun1
set /p name=请输入姓名:
set /p age=请输入年龄:
echo 姓名是%name% 年龄是%age%
goto:eof
12)goto
用于函数或者主程序的跳转,通常的写法都是goto:eof注意:goto:eof 写的位置不一样,效果不同如果写在函数中,goto:eof 是用于终止函数运行如果写在主程序中,goto:eof 是用于终止整个程序的运行
@echo off
call:myfunc
call:myfunc
call:myfunc
pause
goto:eof
:myfunc
echo hello world
echo hello world11
goto:eof
echo hello world12
13)call
用于调用函数,也可以调用别的bat脚本
@echo off
title this is a test
call:fun_test
goto:eof
:fun_test
echo 测试函数+1
pause
goto :eof
14 errorlevel
是脚本内置变量这个变量的值等于0,表示面命令执行成功这个变量的值不等于0,表示面命令执行失败
@echo off cd abcd echo %errorlevel% cd / echo %errorlevel% pause
案例
@echo off
title this is a test
:fun_main
echo 这是个测试函数
call :fun_test
if %errorlevel%==0 (
call :fun_aa
)
pause
goto :eof
:fun_aa
echo 前面调用没有报错
goto :eof
:fun_test
echo 测试函数+1
goto :eof
pause
案例
@echo off
rem 让用户输入提供ip地址,判断当前网络中,是否有这个ip
set /p ip=请输入ip地址:
ping %ip% -w 1 -n 1
echo %errorlevel%
pause
15)for
用于循环
dir /b 指定目录 这个语法可以用于获得指定目录下的所有文件和文件夹
for /f 遍历指定目录下所有的文件和文件夹
for /d 遍历指定目录下所有的文件夹
for /r 遍历指定目录下所有的文件和子文件夹中的文件
%%i 则是声明的变量,可以是任意的变量名,但变量名前面必须加上两个百分号%%
@echo off
title this is a test
:fun_main
set curdir=%~dp0test1\
echo 有后缀的是文件,无后缀的是文件夹
for /f %%i in ('dir /b "%curdir%"') do (
echo %%i
)
pause
goto :eof
@echo off
for /l %%i in (1, 1, 100) do (
echo %%i
adb devices
)
pause
timeout 5 > 1.txt
16)for 进阶 delims(分隔符)
读取的字符串会以这些分隔符进行拆分成多个子字符串
@echo off
title this is a test
:fun_main=
for /f "delims=,/" %%i in (test.txt) do (
echo %%i
)
pause
goto :eof
17)for 进阶 token(标识列)
读取的字符串列会以标识列索引赋值给变量
@echo off title this is a test :fun_main= for /f "delims=,/ tokens=1,2" %%a in (test.txt) do ( echo 索引1:%%a echo 索引2:%%b ) pause goto :eof
18)>>
输出重定向正常情况下,执行命令的时候,命令的输出结果在显示器上进行输出,这个叫做标准输出通过>> 可以将本来显示在显示器上的内容保存到一个文件中,这就是输出重定向
@echo off
title this is a test
:fun_main
set curdir=c:\
dir /b %curdir%>>testaa.txt
pause
goto :eof
dir /b 指定目录 这个语法可以用于获得指定目录下的所有文件和文件夹
19)屏蔽命令的输出
- 命令的输出结果有两种情况:
- 命令执行正确的输出
- 命令执行错误的输出
nul 称之为黑洞文件,任何内容重定向黑洞文件后,都会消失
>nul 的使用场景:是将哪些 不需要显示在显示器上,也不需要保存的信息给清除掉
@echo off
rem 让用户输入提供ip地址,判断当前网络中,是否有这个ip
set /p ip=请输入ip地址:
ping %ip% -w 1 -n 1 >nul
echo %errorlevel%
pause
屏蔽正确输出结果
>nul
屏蔽错误输出结果2>nul
例子
仅仅屏蔽正确或者错误的输出
echo aaa >nul
ech aaa 2>nul
将正确和错误的输出都屏蔽掉
echo aaa >nul 2>nul
ech aaa >nul 2>nul
20)bat中的字符串操作
1)字符串中是否包含某个字符串
echo 字符串 | findstr 子字符串 >nul && ( 包含时的情况 )
案例:包含的情况如下:@echo off title this is a test :fun_main set strname=hello set teststr=213123 hello world echo %teststr% | findstr %strname% >nul && ( echo %teststr% 中包含 %strname% pause goto :eof ) echo %teststr% 中不包含 %strname% pause goto :eof
案例:不包含的情况如下:
@echo off
title this is a test
:fun_main
set strname=hel2lo
set teststr=213123 hello world
echo %teststr% | findstr %strname% >nul && (
echo %teststr% 中包含 %strname%
pause
goto :eof
)
echo %teststr% 中不包含 %strname%
pause
goto :eof
案例:字符串删除所有空格
@echo off
title this is a test
:fun_main
set teststr=213123 hello world
set teststr=%teststr: =%
echo %teststr%
pause
goto :eof
案例:字符串截取
@echo off
title this is a test
:fun_main
set teststr=*213123 hello world##
echo %teststr%
set teststr=%teststr:~1,-1%
echo %teststr%
pause
goto :eof
21)copy
可以复制文件或者文v案例:
将a.txt复制成b.txt
@echo off
c:
cd /
copy a.txt b.txt >nul
pause
22)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
23)if判断
判断的格式 1
if 判断条件 (
当条件成立的时候执行的代码
)
判断的格式2
if 判断条件 ( 当条件成立的时候执行的代码 )else ( 当条件不成立的时候执行的代码 )
判断数字
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
案例:让用户输入一个年龄,判断这个年龄是否大于18,大于18显示已成年
@echo off
set /p age=请输入年龄:
if %age% GEQ 18 (
echo 已成年
) else (
echo 未成年
)
pause
判断字符串
== 等于
案例:让用户输入一个IP地址,判断这个ip是否在线
@echo off
set /p ip=请输入一个IP地址;
ping %ip% -w 1 -n 1 >nul 2>nul
if %errorlevel% EQU 0 (
echo 主机在线
) else (
echo 主机离线
)
pause
案例:
@echo off
title this is a test
:fun_main
echo 这是个测试函数
call :fun_test
if %errorlevel%==0 (
call :fun_aa
)
pause
goto :eof
:fun_aa
echo 前面调用没有报错
goto :eof
:fun_test
echo 测试函数+1
goto :eof
pause
4.3案例
案例1:查看电脑IP地址的批处理命令
@echo off
ipconfig /all
pause
案例2:删除垃圾文件
(1)批处理文件中不能采用#号的注释方式,可以采用其他注释方式,如::等,但均是行注释,本代码为方便逐行注释,采用Python的注释方式。(2)尽量一行一条命令,然后一行一行去执行
:: 关闭回显功能,屏蔽执行过程,在屏幕上只显示结果,不显示执行过程 ,
:: 一般放在首行,常用。
@echo off
:: 为字体颜色
:: 用两个字符来设置颜色类型,前面的是背景颜色,后面的是字体颜色
color 0a
:: title为设置程序标题
title clear program
echo ---------------------------------------------------------------------------
echo 清除系统垃圾
echo 即将开始操作
echo ---------------------------------------------------------------------------
:: 设置暂停,执行到此处暂停
pause
:: 输出空一行
echo.
:: 提示正在操作
echo 正在进行清除垃圾操作,请稍后......
:: 切换到D盘
:: >nul 2>nul 将整合错误的信息都屏蔽掉
d: >nul 2>nul
:: 返回D盘根目录
cd\ >nul 2>nul
:: 删除文件及文件夹
rd . /s/q >nul 2>nul
echo 垃圾清理完成
pause
C:\Users\Administrator\DownloadsC:\Users\Administrator\AppData\Local\Microsoft\Windows\INetCache
(1)按win+r键,输入cmd,在DOS命令窗口,输入color ?,可以显示各个颜色与数字字母的对应关系。(2)批处理中,若想显示结果空一行,执行echo. ,否则即使批处理文件中有空行,显示结果也不会空行。
“:”冒号的用法(1)“:”用于定义一个命令区间,可以把若干个命令划分为若干个区块,每个冒号为一个区块,如:1、:2、:3。(2)“:”后面可以跟任何符号,包括数字、汉字、英文等,表示对这个区块起个名字。(3)“:”并不是命令,没有任何操作,但是系统能识别,表示进入某个区块。所以“:”单独使用没有任何意义,要与goto(跳转)配合使用。start用法(1)start 表示开启的意思,后面可以写路径/程序/网页,帮助我们打开某个程序或网页等(2)若start后面什么都不写,表示打开cmd。userprofile变量和%%(1)userprofile是一个变量,是系统自定义的,其值表示当前用户的家目录路径。(2)%%表示取值,获取变量值。
案例3:定时小程序
shutdown -s -t(秒)
例如:2小时后自动关机
shutdown -s -t 7200
shutdown -a
案例4:
@echo off
color 0a
title 定时小程序V1.0
:menu
cls
echo ==========================
echo 菜单
echo 1.定时关机
echo 2.取消定时
echo 3.退出
echo ==========================
set /p cho=请选择:
if %cho% EQU 1 (
echo 设置关机时间
set /p time=请输入多少秒后关机:
shutdown -s -t %time% >nul 2>nul
pause
goto:eof
)
if %cho% EQU 2 (
echo 取消关机
shutdown -a
pause
goto:eof
)
if %cho% EQU 3 (
echo 再见
pause
goto:eof
)
echo 你输入错了,请输入[1 或 2 或 3]
pause
goto:menu
pause
(1)set设置变量,“set /p choose=输入您的选择序号”,其中”choose"为变量,假如不加“/p",则"choose=“后面为变量choose的值,而加了” /p"表示choose变量的值为用户所输入的,后面跟的话只是给用户看的。该行命令是为了给用户选择。(2)set设置变量,“set /p time=请输入定时关机时间(单位/s):”,其中”time"为变量,假如不加“/p",则time=后面为变量time的值,而加了" /p"表示time变量的值为用户所输入的,后面跟的话只是给用户看的。该行命令是为了给用户设置定时关机时间。(3)“goto menu” 这行命令是为了执行完1或2区块后程序不会继续往下执行,而是返回菜单。(4)这个清屏命令是为了执行完1或2区块后程序返回菜单区块后,之前的菜单可以清屏,只是为了美观。(5)注意逻辑完整,提示信息完整。
- taskkill杀进程
- taskkill /im explorer.exe /f
- #强制杀死指定名称的进程.
- taskkill为杀进程
- /im为指定进程,后面可#以跟进程名称,
- /f表示强制,
- explorer.exe是windows程序管理器/桌面进程。
案例5:
@echo off
color 0a
taskkill /im explorer.exe /f >nul 2>nul
echo IE被杀死了
ping -n 5 127.0.0.1 >nul 2>nul
start c:\windows\explorer.exe
echo .....
pause
案例6:快速查看本机IP地址和电脑名
@echo off
echo 本机IP
ipconfig|find "IPv4"
echo.
echo 电脑名
hostname
pause>nul
exit
获取局域网内本机IP:
@echo off
for /f "tokens=4" %%a in ('route print^|findstr 0.0.0.0.*0.0.0.0') do (
set IP=%%a
)
echo 你的局域网IP是:
echo %IP%
pause>nul
案例7:重启网卡的批处理命
@ECHO OFF
ECHO Fix DHCP Configuration:
ECHO The network card is restarting
ECHO Please wait...
ipconfig /release>NUL 1>NUL 2>NUL
ipconfig /renew>NUL 1>NUL 2>NUL
ECHO All Done. The network card has restarted !
ECHO Please enjoy it.
:EN
PAUSE
案例8:清除DNS缓存并重新注册DNS的批处理
清除DNS缓存并重新注册DNS的批处理
@echo off
ipconfig /flushdns
ipconfig /registerdns
ping www.baidu.com
pause
获取本机用户及当前用户的批处理命令
@echo off
echo 本机上拥有以下用户名:
echo.
for /f "skip=4 tokens=1-3" %%i in ('net user') do (
if not "%%i"=="命令成功完成。" echo %%i
if not "%%j"=="" echo %%j
if not "%%k"=="" echo %%k
)
echo.
echo 当前登录本机的账户是:%username%
pause>nul
好了好了,同学们,看到现在的肯定也很累了。(说实话我也累了)而且能看到最后的估计都没一个人吧,要是有的话。评论区告我一声,未必回你1.各位英雄,到此为止吧,朕歇了。明天见,亲爱的你们。
还是那句话:能力越大,责任越大!