批处理(Batch),也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理。批处理文件的扩展名为 bat
批处理文件,或称为批处理程序,是由一条条的DOS命令组成的普通文本文件,可以用记事本直接编辑或用DOS命令创建
批处理可以在dos系统或windows系统上运行,所以批处理的命令比dos的命令要多,基本都是dos命令组成,但多了些流程控制命令
启动命令行,默认来到用户目录,运行 copy con
来创建批处理文件,将屏幕上输入的内容保存在 test.bat 中,使用 ctrl + z,然后按回车来保存
输入 test.bat
可以直接运行,如果当前目录下不存在 a.txt
echo hello> a.txt
可以创建 a.txt 内容为 hello,使用 dir
来查看当前目录下文件看是否创建成功,如果存在 a.txt
新建 test.txt,内容如下,保存后,修改后缀 .txt 为 .bat
打开 cmd 运行
echo [message]
:显示信息
echo {[on/off]}
:开/关回显功能,如果将@echo off`放最前面,将不会显示命令本身,只显示输出结果
其中 type
可以显示文本文件的内容
echo on
type a.txt
echo off
echo Hello
可以看出,echo off 关闭回显(但其本身仍然会回显), 接下来的命令行不会回显
@
用于关闭本命令回显,@
并不受echo状态的影响,例如 @echo on
,这条命令不显示,@type a.txt
这条命令不显示,但命令执行结果(查看a.txt内容)会显示。
@echo on
@type a.txt
echo off
echo Hello
@
只针对当前行有效,echo on/off
针对后边的命令有效,直到下一个 echo on/off
命令出现
pause
用于暂停批处理的执行器并给出提示信息,然后由用户决定是继续执行还是终端执行
@echo off
echo pause命令测试...
pause
echo Hello World
执行pause以后会提示一句话【按任意键继续执行】
①当我们按任意键的时候,继续执行pause后面的语句,也是说继续执行
②当我们按ctrl+C的时候,会提示出,是不要终止批处理的提示,并且这个时候可以选择是继续还是终止
call
命令用来从一个批处理脚本中调用另一个批处理脚本,并且能够调用指定标号后的命令(注意调用时必须在标签名前加冒号)。调用完毕后回到调用处继续执行后边的命令,这也就是为什么 A 后边的内容输出了两遍,看例子:
test.bat内容
@echo off
echo 正在调用called.bat...
call called.bat
echo 调用完毕called.bat...
echo 现在调用 A 标号后的内容...
call :A
:A
echo This is A
called.bat内容
@echo off
echo This is called.bat
rem
为注释命令,该命令后的内容不被执行,但能回显
在 test.bat 中列出 后缀为 .bat 的文件
@echo off
rem 这是一个简单的批处理命令
dir *.bat
当 刚才的第一行 改为 @echo on
,rem 能回显,但实际执行的时候,计算机会忽略 rem 这一行
set
是专门用来创建、设置、查看或删除环境变量
@echo off
set xxx="C:\Users\00lix\Desktop\test\video"
set yyy="D:\KuGou"
echo 显示以x开头的变量
set x
dir /w %xxx%
rem 删除名为xxx的变量
set xxx=
解释下 命令。首先 使用 set 变量=值
为 xxx 和 yyy 分别赋值,也就是两个路径
然后使用 set 参数
来显示该变量或以该字符串为前缀的变量
dir /w
以宽格式显示列表,在每一行上最多显示 5 个文件名或目录名
最后使用set 变量名=
删除该变量,注意:等号后面不能有空格
goto label
跳转到要执行的标签,标签由冒号与标签名组成
@echo off
echo 跳过中间的命令,执行最后一条
goto last
echo 111
echo 222
:last
echo 333
启动单独的“命令提示符”窗口来运行指定程序或命令。如果在没有参数的情况下使用,start 将打开第二个命令提示符窗口,命令格式如下,还有很多参数,自行百度
start ["title"] [/WAIT][command/program]
“title”:在窗口标题栏中显示的标题
WAIT:启动应用程序并等候它结束
@echo off
echo 将在新窗口中显示a.txt的内容
start "a.txt"的内容 /wait type a.txt
echo 已从新命令窗口返回
运行程序后,打开了新窗口执行了命令,因为加了 /wait ,所以把新窗口关闭后,才能回到第一个窗口继续执行
如果 if 后面判断为真后,只处理单句命令的话,直接跟在 后面就可以
如果 判断为真后,需要执行多条命令的话,则需要用括号将多条命令扩起来
注意: 括号“(” 要位于跟 if 同一行,如果不在同一行的话执行时会报语法错误
注意2:多层嵌套的if语法如下
if exist a.txt (
if exist 1.txt (
echo 存在 a.txt 和 1.txt
) else (
echo 存在 a.txt 但是不存在 1.txt
)
) else if exist b.txt (
echo 不存在 a.txt 但是存在 b.txt
) else (
echo 不存在 a.txt 和 b.txt
)
如果你要将 else if 换行,需要在 “)” 后面添加 “^” 符号。
用法1:判断文件是否存在
@echo off
if exist a.txt (echo 存在a.txt) else (echo 不存在a.txt)
用法2:判断某两个字符串是否相等
@echo off
if "abc"=="abc" (echo 相等) else (echo 不相等)
默认情况if语句是区分大小写,可以添加/i
参数取消大小写区分
@echo off
if /i "ABC"=="abc" (echo 相等) else (echo 不相等)
运行结果
用法3:判断数值是否相等
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
@echo off
if 1 equ 2 (echo 1和2相等) else (echo 1和2不相等)
用法4:判断某个变量是否已经被赋值
@echo off
set var1=123
if defined var1 echo var1被定义了,值为%var1%
if defined var2 (echo var2被定义了) else (echo var2没被定义)
用法5:if结合errorlevel使用
IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的,注意只是上一个命令的返回值
环境变量errorlevel的初始值为0,当一些命令执行不成功,就会返回一个数值,如:1 ,2 等
@echo off
set /a sum=0
for %%x in (*.txt) do (
echo %%x文件内容如下:
type %%x
echo.
set /a sum=sum+1
)
echo 一共显示了%sum%个文本文件
set /a
是指定一个变量等于一串运算字符
echo.
相当于我们打字时按了一下回车
%%x
是for语句中对形式变量的引用
启动批处理文件中环境变量的本地化。本地化将持续到出现匹配的 endlocal 命令或者到达批处理文件结尾为止
@echo off
setlocal
path=d:\
echo 局部环境变量path的值:
set path
endlocal
echo 系统环境变量path的值:
set path
更改批处理文件中可替换参数的位置
语法:Shift [/n]
设置批处理从第n个参数开始移位,n的值为0~8
@echo off
:round
if "%0"=="" goto end
echo %0内容如下:
type %0
echo.
shift
goto round
:end
首先是一个 round 标签,先判断第一个参数是否为空,如果为空则表示没提供参数,程序直接结束
参数不为空时,显示文件内容
遇到shift时, shift 将所有参数往前移动一位
%0 是第一个 test.bat
%1 是 a.txt
%2 是 b.txt
…
*
表示任意多个字符,包括0个
?
表示任意单个字符
@echo off
if exist *.txt echo 当前文件夹下有文本文件
echo 以a开头的目录如下:
dir /d /w /b a*
echo.
echo 以dk开头、第三个字符为任意字符、第四个字符为t、扩展名为三个字符且以do开头的文件如下:
dir /b /w dk?t.do?
这批处理程序中的3个重定向符号,用于控制数据的输入或输出方式。<
符号的右边是数据源,左边代表数据目的地;>
及>>
符号的左边是数据源,>
会替换目的数据,而>>
符号是将数据源添加到目标数据之后
@echo off
echo 正在自动创建的批处理...
echo type a.txt > auto.bat
echo dir /b /w >> auto.bat
echo 被自动创建的auto.bat文件的内容如下:
type auto.bat
echo.
echo 排序后的auto.bat为:
sort < auto.bat
echo type a.txt > auto.bat
是把 type a.txt
输入到 auto.bat 中,替换
echo dir /b /w >> auto.bat
是把 dir /b /w
追加到 auto.bat 中
sort < auto.bat
是把 auto.bat 的内容 传递给 sort 进行排序
管道符|
将一个命令的输出数据提取出来,然后将提取的数据作为另一个命令的输入
@echo off
find "naughty" story.txt | sort > result.txt
echo 对包含“naughty”单词的行排序后如下:
type result.txt
批处理首先在“story.txt"文件中找出所有包含“naughty”的行,接着将找出的结果通过|
传给“sort" 命令进行排序,最后将排序结果保存到“result.txt" 文件