批处理文件(batch file)定义

  • 批处理(Batch),也称为批处理脚本,就是对某对象进行批量的处理,扩展名为bat
    包含一系列 DOS命令,通常用于自动执行重复性任务,用户只需双击批处理文件便可执行任务。
  • 批处理是一种简化的脚本语言,它应用于DOS和Windows系统中,它是由DOS或者Windows系统内嵌的命令解释器解释运行

批处理文件的创建

  • 批处理文件,是由一条条的DOS命令组成的普通文本文件,可以用记事本直接编辑或用DOS命令创建。
  • 一般情况下,每条命令占据一行。
  • 当然也可以将多条命令用特定符号(如:&、&&、|、||等)分隔后写入同一行中
  • 还有的情况就是像if、for等较高级的命令则要占据几行甚至几十几百行的空间。系统在解释运行批处理程序时,首先扫描整个批处理程序,然后从第一行代码开始向下逐句执行所有的命令,直至程序结尾或遇见exit命令或出错意外退出。

批处理文件的常用命令总结

批处理符号简介

  • 回显屏蔽 @ :关闭单行回显
  • 重定向1 >与>>
  • 重定向2 <
  • 管道符号 |
  • 转义符 ^
  • 逻辑命令符包括:&、&&、||

Windows Batch 常用命令

  1. 回显命令: echo 和 @
    @ #关闭单行回显
    echo off #从下一行开始关闭回显
    @echo off #从本行开始关闭回显。一般批处理第一行都是这个
    echo on #从下一行开始打开回显
    echo #显示当前是 echo off 状态还是 echo on 状态
    echo. #输出一个”回车换行”,空白行
    # (同echo, echo; echo+ echo[ echo] echo/ echo)

  2. 清屏:cls

  3. 暂停命令: pause

  4. &&:顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令
    find "tuzi" c:test.txt && echo 兔子
    如果找到了"tuzi"字样,就显示"兔子",找不到就不显示

  5. ||:顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令
    find "tuzi" c:test.txt || echo 不是兔子
    如果找不到"tuzi"字样,就显示"不是兔子",找到了就不显示

  6. 输出重定向命令:> 和 >>
    > 清除文件中原有的内容后再写入
    >> 追加内容到文件末尾,而不会清除原有的内容

  7. <:从文件中获得输入信息,而不是从屏幕上

  8. 命令行传递给批处理的参数:%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*
    %0 批处理文件本身
    %1 第一个参数
    %9 第九个参数
    %* 从第一个参数开始的所有参数

  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

常见问题:

  1. 如果你自己编写的.bat文件,双击打开,出现闪退
    原因:执行速度很快,执行完之后,自行关闭
    解决办法:在最后面一行加上 pause
@批量创建不同名文本
for %%a in (*.pdf) do echo,>"%%~na.txt"
pause