文章目录

  • 摘要
  • 概念
  • 作用
  • 常用命令
  • 适用场景


摘要

本文主要对 bat 文件的概念、作用、常用命令以及适用场景四个方面进行简短介绍

概念

1,首先我们要知道 bat 文件在 windows 这个大家庭中是非常实用的
2,bat文件是dos下的批处理文件。批处理文件是无格式文本文件,它包含一条或多条命令。它的文件扩展名为.bat.cmd在命令提示下输入批处理文件的名称,或者双击该批处理文件,系统就会调用cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。入侵者常常通过批处理文件的编写来实现多工具的组合入侵、自动入侵及结果提取等功能(此处我们引用百度词条的相关概念)

作用

bat 文件 又名 批处理文件,从名字我们就可以很清晰的了解到这个文件主要是用来对命令等比较繁琐的事情进行汇总处理使用的

常用命令

介绍常用命令之前,我们先就如何查看帮助文档进行说明
我们可以使用 name /? 方法直接在 命令行查看帮助文档

下面我们就 bat 文件常用的几条命令进行详细解释,对于其它的采用一笔带过方式
常用命令
1,IF 语法格式:

IF [NOT] ERRORLEVEL number command:

IF ERRORLEVEL这个句子必须放在某一个命令的后面,执行命令后由IF ERRORLEVEL 来判断命令的返回值。Number的数字取值范围0~255,判断时值的排列顺序应该由大到小。返回的值大于等于指定的值时,条件成立
实例:

@echo off
dir c:
rem退出代码为>=1就跳至标题1处执行,>=0就跳至标题0处执行
IF ERRORLEVEL 1 goto 1
IF ERRORLEVEL 0 goto 0
Rem 上面的两行不可交换位置,否则失败了也显示成功。
:0
echo 命令执行成功!
Rem 程序执行完毕跳至标题exit处退出
goto exit
:1
echo 命令执行失败!
Rem 程序执行完毕跳至标题exit处退出
goto exit
:exit
pause
IF [NOT] string1==string2 command

string1 和string2 都为字符的数据,英文内字符的大小写将看作不同,这个条件中的等于号必须是两个(绝对相等的意思)
实例:

@echo off
IF "A"=="A" goto 0
:1
echo "进入1号领地"
goto exit
:0
echo "进入外部势力范围"
goto exit
:exit
pause

输出:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oS4uLqx0-1603359344295)(/uploads/python/images/m_383a044d8ef7b7e0f4929c713676045c_r.png)]

IF [NOT] EXIST filename command

判断文件是否存在
filename 此处最好是指定文件的路径
实例:

@echo off
IF EXIST C:\batch\test.bat goto 0
:1
echo "进入1号点"
goto exit
:0
echo "进入0号点"
goto exit
:exit
echo "结束"
pause

文件目录结构:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pCgs2XBS-1603359344300)(/uploads/python/images/m_ad20f3bee913e71685f9eee31ba87750_r.png)]
输出:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6exB0PkA-1603359344310)(/uploads/python/images/m_2a27a983ce57387687d9e2c4f447d19a_r.png)]

2,FOR 关键字:for、in和do是for语句的关键字,它们三个缺一不可
实例:

@echo off
for  %%I in (ABC) do echo %%I
pause

输出:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wugxCC19-1603359344316)(/uploads/python/images/m_0da0dee9e94565b56ed00e8e76692bdd_r.png)]

3,接收键盘输入

set /p startip=开始IP:
set /p endip=结束IP:

实例:

@echo off
set /p startip=开始IP:
set /p endip=结束IP:

echo %startip%
echo %endip%
pause

输出:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3yU5FaU6-1603359344319)(/uploads/python/images/m_08ea39cf0270fa6ab6304b0a8628a75f_r.png)]

4,设置变量 实例:

@echo off
set a="syn"
echo %a%
pause

输出:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E48zVbjV-1603359344327)(/uploads/python/images/m_16b9aa79e455933d19d81b3c000dfb7f_r.png)]
注意:set 设置变量 = 前后不能有空格

5,变量延迟 在介绍变量延迟之前,我们先来了解一下批处理命令的运行原理
批处理读取命令时是按行读取的(另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行),在处理之前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值
实例5.1:

@echo off
set a=1
set a=2 & echo %a%
pause

rem "开启变量延迟"
setlocal enabledelayedexpansion
set b=1
set b=2 & echo !b!
pause

输出结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-85h0aawf-1603359344335)(/uploads/python/images/m_55c5a8cbcdf3ddec488e84b4feb7315d_r.png)]

首先,我们观察结果 第一个为 1,第二个为 2。而上面脚本中输出唯一不同的就是 %% 和 !! ,这两个有什么不同。下面我们将从 bat 文件的运行原理进行一个解释
首先,在没有开启变量延迟的时候,由于 bat 文件的执行是按照行来执行的,上一行的设置只能影响该行之后的内容,所以第一个中 b 输出为 1,而不是 2;当使用 setlocal enabledelayedexpansion 开启变量延迟之后,我们就要使用 !! 来输出变量了,此时我们告诉批处理命令在运行时,先给变量赋值,而不是在运行该行过程中赋值

变量延迟启动步骤:

1,使用 setlocal enabledelayedexpansion 命令启动变量延迟
2,使用 !! 输出变量

6,echo: 表示显示此命令后的字符

7,echo off: 表示不显示此命令后的字符

8,@:与 echo off 类似,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)

9,call:在该 bat 文件中调用另一个 bat 文件,若不使用 call 命令会造成调用的 bat 文件执行完毕后不会跳转回该 bat 文件继续执行

10,pause:运行此句会暂停批处理的执行并在屏幕上显示 Press any key to continue… 的提示,等待用户按任意键后继续

11,rem:相当于程序中的注释功能,rem 之后的该行内容不执行

适用场景

cmd下输入一长串命令去执行一条指令,如果以后会经常使用到该条命令,每次进行手动输入比较麻烦且容易输错,这时就可以引进bat文件