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

一、批处理简介

1.1  什么是批处理呢?

  • 批处理就是一个脚本文件
  • 在脚本里包含了很多要批量、依次执行的命令
  • 这样的脚本就是批处理

        换句话来说,就是通过控制台将一些命令集中处理达到更快的工作效率,在控制台直接输入虽然很方便,但当进行大量的命令处理时单用控制台写命令就显得有些力不从心,因此要用批处理的方式进行大量的命令处理。

  • 那什么是脚本文件呢?

脚本文件就是文本文件(后缀为.txt),在文件中包含了多个执行命令(如下图)

1.2  批处理的作用

批量、自动、定时的去执行一些操作

1.3  写批处理文件的方法

第一步:创建一个文本文件【后缀为.txt的文件】

第二步:在文本文件中写入要自动执行的dos命令,然后保存退出

第三步:将这个文本文件的后缀更改为.bat

例: 通过批处理,在C盘的根目录下创建三个目录(如下图)

二、Dos命令

2.1 echo

作用:输出一段信息

例:输出“hello world”(如下图)

echo hello world
pause

hello world  为输出内容
  • echo可以用来拼接字符串
例:用echo将hello 字符串和world字符串拼接到一起,然后进行输出(如下图)
echo "hello" "world"
pause

2.2  变量

变量包含了两个部分

  • 变量的名字
  • 变量中保存的值 
  • 定义变量格式
set 变量名=变量值
  • 这里需要用set标识符来定义变量和赋值
  • "="号之间的空格格式要求严格,标识符后不要有空格!

例:定义一个变量,变量名是name,变量的值是tom;再定义一个变量,变量名是age,变量的值

是18
set name=tom
set age=18
  • 使用变量格式   

  %变量名%

  • echo可以输出字符串,也可以输出变量中的值
注意:使用变量的时候,需要给变量前后百分号%
例:定义变量保存姓名和年龄,用echo进行输出【其实这个就是拼接有变量的字符串】
set param1=姓名
set param2=年龄
echo %param1%%param2%ok
pause

2.3  打开/关闭回显 

回显:
回显就是在执行批处理中显示的命令
  • 打开回显:  
显示批处理文件中的命令【默认就是打开回显的】
打开回显的命令:@echo on  
  • 关闭回显:  
不显示处理文件中的命令
关闭回显的命令:@echo off
例:
echo "======执行下面的命令的时候,有回显======="
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 [ON | OFF]
ECHO [message]
echo 命令的第一种用法 :echo on 和 echo off
  • echo on表示打开回显
  • echo off表示关闭回显
echo 命令的第二种用法 :echo message
这个很简单,就是显示后面的信息
echo 命令第三种用法
显示当前回显设置状态,就是显示回显打开或关闭
echo也可以输出文件

2.4  印当前路径

  • 可以借助内置变量
  • 内置变量:在系统中自动已经定义的变量
  • %cd% 或者 %~dp0   
@echo off
title this is a test
echo %cd%
echo %~dp0
pause

2.5  rem  【注释】

作用:
注释的内容,就是一个解释信息【注释的内容是不会当做程序来运行】
作用1:將脚本中某一行或者多少设置为不执行
作用2:解释脚本中的每行内容是作用
注意:
可以用"::"代替"REM"
::可以提高执行速度,但是REM的兼容性更好
【批处理中快慢无所谓,建议大家用rem注释】
@echo off
rem echo "程序开始执行"
echo "lelelele"
echo "程序执行结束"
@echo on
pause

2.6  pause  【暂停】

作用:是将dos界面暂停关闭/或按任意键继续执行

2.7  title  【标题】

作用:用来设置dos的标题(如下图)
title ch225
 
pause

2.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 编码格式 (如下图)

2.9  start 

作用:用于调用其他程序如何执行txt 

这个案例就可以启动qq(如下图)

@echo off
title this is a test
start qq.exe
@echo on
pause
注意:
  • qq.exe需要和批处理文件在同一个目录中,是为了方便
  • 也可以将qq.exe放到任意位置,但是在执行的时候,就必须加上路径
  • start在启动的时候,可以启动exe程序,也可以启动bat

2.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

2.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
注意:
在批处理中,函数的位置通常都是放到程序的末尾,这是因为批处理的函数会被自动执行
但是在其他的编程语言中,函数的位置可以在开头也可以末尾
函数要写在程序的最后,否则在重复调用函数的时候,容易出现函数执行了一次程序就结束的现
  • 执行正常的程序【将函数部分写在最后】(如下图)
@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
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

2.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

2.13  call

作用:用于调用函数,也可以调用别的bat脚本

@echo off
title this is a test
call:fun_test
goto:eof
:fun_test
    echo 测试函数+1
    pause
    goto :eof

2.14 errorlevel

是脚本内置变量,可以检测上一个命令是否执行成功
  • 如果这个变量的值等于0,表示上面命令执行成功
  • 如果这个变量的值不等于0,表示命令执行失败
  • 变量分为两种
用户自己定义的,也就是用set定义的
系统自动生成的,这种不需要用户set,可以直接使用
@echo off
cd abcd
echo %errorlevel%
cd /
echo %errorlevel%
pause

例1:

@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

 例2:

@echo off
rem 让用户输入提供ip地址,判断当前网络中,是否有这个ip
set /p ip=请输入ip地址:
ping %ip% -w 1 -n 1
echo %errorlevel%
pause

2.15  for

  • 用于循环
dir/b 指定目录   这个语法可以用于获得指定目录下的所有文件和文件夹
for/f 遍历指定目录下所有的文件和文件夹
for/d 遍历指定目录下所有的文件
for/r 遍历指定目录下所有的文件和子文件夹中的文件
%%i 则是声明的变量,可以是任意的变量名,但变量名前面必须加上两个百分号%%

例:每隔1秒输出一个数字,范围是1-100

@echo off
for /l %%i in (1, 1, 100) do (
    echo %%i
    adb devices
)
pause
  • 关于延时
timeout 5 > 1.txt

2.16 >和>>

  • 输出重定向

>   如果文件不存在,可以创建一个新的文件,然后将命令的执行结果保存到文件中

     如果文件已存在,那么就会把文件原有的内容删除,然后将命令执行的结果保存

>>  如果文件不存在,可以创建一个新的文件,然后将命令的执行结果保存到文件中

    如果文件已存在,那么会将命令执行结果保存到文件原有的内容的后面

正常情况下,执行命令的时候,命令的输出结果在显示器上进行输出,这个叫做标准输出
通过>> 可以将本来显示在显示器上的内容保存到一个文件中,这就是输出重定向
@echo off
title this is a test
:fun_main
    set curdir=c:\
    dir /b %curdir%>>testaa.txt
    pause
    goto :eof

2.17  屏蔽命令的输出

null 称之为黑洞文件,任何内容重定向到黑洞文件后都会消失

>null 的使用场景:是将那些不需要显示在显示器上也不需要保存的信息给清除掉

@echo off
rem 让用户输入提供ip地址,判断当前网络中,是否有这个ip
set /p ip=请输入ip地址:
ping %ip% -w 1 -n 1 >null
echo %errorlevel%
pause

2.18 if判断

if判断格式:

格式1:单分支
        if 判断条件:(
            当条件成立的时候,执行此处代码
          )

格式2:双分支
        if 判断条件:(
            当条件成立的时候,执行此处代码
        )else:(
            当条件不成立的时候,执行此处代码
        )

格式3:多分支
        if 判断条件1:(
            当条件1成立的时候,执行此处代码
        )elif 判断条件2:(
            当条件2成立的时候,执行此处代码
        )elif 判断条件3:(
            当条件3成立的时候,执行此处代码
        )else:(
            当所有条件都不成立的时候,执行此处代码

        )

  • 判断类型
第一种:判断数值:
  •     判断两个数是否相同
  •     判断两个数字的大小
第二种:判断字符串
  • 判断字符串相同 或者 不相同

例:让用户输入自己的年龄,判断是否已成年

age=int(input("请输入年龄:"))

	if age>=18:
	    print("已成年")
	else:
	    print("未成年")
  • 判断数字
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于

例:让用户输入两个数字,输出较大的数字

num1 = int(input("请输入数字1:"))
	num2 = int(input("请输入数字2:"))

	if num1>num2:
	    print(f"较大的数字是 {num1}")
	elif num1<num2:
	    print(f"较大的数字是 {num2}")
	else:
	    print(f"两个数字相同,都是{num2}")
  • 判断字符串
== 等于
例:
@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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值