批处理文件(batch file)定义
- 批处理(Batch),也称为批处理脚本,就是对某对象进行批量的处理,扩展名为bat。
包含一系列 DOS命令,通常用于自动执行重复性任务,用户只需双击批处理文件便可执行任务。 - 批处理是一种简化的脚本语言,它应用于DOS和Windows系统中,它是由DOS或者Windows系统内嵌的命令解释器解释运行
批处理文件的创建
- 批处理文件,是由一条条的DOS命令组成的普通文本文件,可以用记事本直接编辑或用DOS命令创建。
- 一般情况下,每条命令占据一行。
- 当然也可以将多条命令用特定符号(如:&、&&、|、||等)分隔后写入同一行中
- 还有的情况就是像if、for等较高级的命令则要占据几行甚至几十几百行的空间。系统在解释运行批处理程序时,首先扫描整个批处理程序,然后从第一行代码开始向下逐句执行所有的命令,直至程序结尾或遇见exit命令或出错意外退出。
批处理文件的常用命令总结
批处理符号简介
- 回显屏蔽 @ :关闭单行回显
- 重定向1 >与>>
- 重定向2 <
- 管道符号 |
- 转义符 ^
- 逻辑命令符包括:&、&&、||
Windows Batch 常用命令
回显命令: echo 和 @
@ #关闭单行回显
echo off #从下一行开始关闭回显
@echo off #从本行开始关闭回显。一般批处理第一行都是这个
echo on #从下一行开始打开回显
echo #显示当前是 echo off 状态还是 echo on 状态
echo. #输出一个”回车换行”,空白行
# (同echo, echo; echo+ echo[ echo] echo/ echo)清屏:cls
暂停命令: pause
&&:顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令
find "tuzi" c:test.txt && echo 兔子
如果找到了"tuzi"字样,就显示"兔子",找不到就不显示||:顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令
find "tuzi" c:test.txt || echo 不是兔子
如果找不到"tuzi"字样,就显示"不是兔子",找到了就不显示输出重定向命令:> 和 >>
> 清除文件中原有的内容后再写入
>> 追加内容到文件末尾,而不会清除原有的内容<:从文件中获得输入信息,而不是从屏幕上
命令行传递给批处理的参数:%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*
%0 批处理文件本身
%1 第一个参数
%9 第九个参数
%* 从第一个参数开始的所有参数循环命令:for
for %%i in (c: d: e: f:) do echo %%i
依次调用小括号里的每个字符串,执行 do 后面的命令
注意%%i,在批处理中 for 语句调用参数用2个%
默认的字符串分隔符是"空格键","Tab键","回车键"
for %%i in (*.txt) do find "abc" %%i
对当前目录里所有的txt文件执行 find 命令
for /r . %%i in (*.txt) do find "abc" %%i
在当前目录和子目录里所有的.txt文件中搜索包含 abc 字符串的行
for /r . %%i in (.) do echo %%~pni
显示当前目录名和所有子目录名,包括路径,不包括盘符
for /r d:mp3 %%i in (*.mp3) do echo %%i>>d:mp3.txt
把 d:mp3 及其子目录里的mp3文件的文件名都存到 d:mp3.txt 里去
for /l %%i in (2,1,8) do echo %%i
生成2345678的一串数字,2是数字序列的开头,8是结尾,1表示每次加1
for /f %%i in ('set') do echo %%i
对 set 命令的输出结果循环调用,每行一个
for /f "eol=P" %%i in ('set') do echo %%i
取 set 命令的输出结果,忽略以 P 开头的那几行
for /f %%i in (d:mp3.txt) do echo %%i
显示 d:mp3.txt 里的每个文件名,每行一个,不支持带空格的名称
for /f "delims=" %%i in (d:mp3.txt) do echo %%i
显示 d:mp3.txt 里的每个文件名,每行一个,支持带空格的名称
for /f "skip=5 tokens=4" %%a in ('dir') do echo %%a
对 dir 命令的结果,跳过前面5行,余下的每行取第4列
每列之间的分隔符为默认的"空格"
可以注意到 dir 命令输出的前5行是没有文件名的
for /f "tokens=1,2,3 delims=- " %%a in ('date /t') do (
echo %%a
echo %%b
echo %%c
)
对 date /t 的输出结果,每行取1、2、3列
第一列对应指定的 %%a ,后面的 %%b 和 %%c 是派生出来的,对应其它列
分隔符指定为 - 和"空格",注意 delims=- 后面有个"空格"
其中 tokens=1,2,3 若用 tokens=1-3 替换,效果是一样的
for /f "tokens=2* delims=- " %%a in ('date /t') do echo %%b
取第2列给 %%a ,其后的列都给 %%b
常见问题:
- 如果你自己编写的.bat文件,双击打开,出现闪退
原因:执行速度很快,执行完之后,自行关闭
解决办法:在最后面一行加上 pause
@批量创建不同名文本 for %%a in (*.pdf) do echo,>"%%~na.txt" pause