一、批处理简介
1.1 什么是批处理呢?
- 批处理就是一个脚本文件
- 在脚本里包含了很多要批量、依次执行的命令
- 这样的脚本就是批处理
换句话来说,就是通过控制台将一些命令集中处理达到更快的工作效率,在控制台直接输入虽然很方便,但当进行大量的命令处理时单用控制台写命令就显得有些力不从心,因此要用批处理的方式进行大量的命令处理。
- 那什么是脚本文件呢?
脚本文件就是文本文件(后缀为.txt),在文件中包含了多个执行命令(如下图)
1.2 批处理的作用
批量、自动、定时的去执行一些操作
1.3 写批处理文件的方法
第一步:创建一个文本文件【后缀为.txt的文件】
第二步:在文本文件中写入要自动执行的dos命令,然后保存退出
第三步:将这个文本文件的后缀更改为.bat
二、Dos命令
2.1 echo
作用:输出一段信息
例:输出“hello world”(如下图)
echo hello world
pause
hello world 为输出内容
- echo可以用来拼接字符串
echo "hello" "world"
pause
2.2 变量
变量包含了两个部分
- 变量的名字
- 变量中保存的值
- 定义变量格式:
set 变量名=变量值
- 这里需要用set标识符来定义变量和赋值
- "="号之间的空格格式要求严格,标识符后不要有空格!
例:定义一个变量,变量名是name,变量的值是tom;再定义一个变量,变量名是age,变量的值
set name=tom
set age=18
- 使用变量格式
%变量名%
- 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 on表示打开回显
- echo off表示关闭回显
这个很简单,就是显示后面的信息
显示当前回显设置状态,就是显示回显打开或关闭
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 【暂停】
2.7 title 【标题】
title ch225
pause
2.8 中文乱码解决方案
@echo off
chcp 65001
title this is a test
echo 哈哈哈
pause
注意:
例如这个例子可以解决乱码
@echo off
chcp 65001
echo 哈哈哈
pause
例如这个例子无法解决乱码
@echo off
echo 哈哈哈
chcp 65001
pause
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 变量名=提示语等
@echo off
chcp 65001
title 我的第一个案例
rem echo "程序开始执行"
set /p name=请输入你的姓名
set /p age=请输入你的年龄
echo 你的姓名是:%name% ,你的年龄是:%age%
echo "程序执行结束"
@echo on
pause
@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
- 执行异常的程序【将函数部分写在前面】(如下图)
@echo off
:myfunc
echo hello world
goto:eof
call:myfunc
call:myfunc
call:myfunc
pause
goto:eof
@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 是用于终止整个程序的运行
@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