网络安全快速入门(三)windows批处理

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

以上就是笔者整理的关于批处理的一些知识了,如果有问题还请评论区多指教,感谢观看!!

  • 41
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值