批处理(Batch),即批处理脚本,批处理就是对某对象进行批量的处理,是一种简化的脚本语言,在Windows系统中,扩展名为.bat的文件是一个可执行文件,它由一系列的命令构成,其中可以包含对其他程序的调用,这个文件的每一行都是一条DOS命令。批处理通常用于自动执行重复性任务,只需双击批处理文件便可执行任务,而无需重复输入相同指令,通过编写批处理文件,实现自动批量的执行DOS命令来进行特定的操作,可以提高我们的工作效率。

1、Bat批处理常用的命令和符号

echo

echo是用来显示此命令后的字符。语法格式:

echo [on|off] [message]

参数说明:
on | off 指定是否允许命令的回显。若要显示当前的 echo 的设置,可使用不带参数的 echo 命令。
message 指定让 MS-DOS 在屏幕上显示的正文。
实例:在DOS控制台中输出 “hello world”

@echo off
echo hello world
pause

脚本说明:

(1)@ 表示不在 DOS 窗口中显示 echo off 命令;

(2)echo off 表示后续命令在 DOS 窗口中不显示;

(3)echo hello world 表示将在 DOS窗口 中显示 “hello world”字符串;(4)pause 表示脚本执行完成后,不立即关闭 DOS 窗口,而是提示 “请按任意键继续…” 信息。当用户按了任意键,DOS 窗口才关闭;

运行结果:

bat设置echo输出颜色 bat中echo_运维

@(命令行回显屏蔽符 )

@ 符号的作用是使批处理程序中执行的命令行不在 DOS 窗口中显示。
通过下面两个bat脚本运行结果对比就知道@是什么作用了,不带@的脚本:

echo hello world
pause

运行结果:

bat设置echo输出颜色 bat中echo_bat设置echo输出颜色_02


加上@的脚本:

@echo hello world
@pause

运行结果:

bat设置echo输出颜色 bat中echo_批处理_03


@ 和 echo off 的区别:

@ 符号与 echo off 功能相似,都是用来屏蔽命令在 DOS窗口中输出,但 @ 符号是加在每个命令行的最前面,表示运行时不显示这一行的命令行, echo off 则是隐藏该命令后面的所有命令,不包括echo off本身,所以echo off前面要加一个@,这样echo off也可以不显示在DOS窗口中了。

pause

运行 pause 语句会暂停批处理的执行并在屏幕上显示 “请按任意键继续 . . .” 的提示。

2、批处理注释

一个好的脚本注释是必要的,注释是用来对脚本功能的说明,添加注释能提高脚本的可读性,注释是不会被执行的。

rem

rem 在批处理文件中加入注解,也可用 rem 命令来屏蔽命令。
语法格式:

REM [string]

参数说明:
string 指定要屏蔽的命令或要包含的注解。
实例:使用 rem 命令添加注释和屏蔽命令 “echo hello world”。

@echo off
rem 这是一行注释
rem echo hello world
pause

运行结果:

bat设置echo输出颜色 bat中echo_批处理_04

其他形式的注释:

@echo off 
rem 一种比较常用的注释方法
goto start= 可以是多行文本,可以是命令
= 可以包含重定向符号和其他特殊字符
= 只要不包含 :start 这一行,就都是注释:start 
:: 注释内容(第一个冒号后也可以跟任何一个非字母数字的字符) 
echo 注释内容(不能出现重定向符号和管道符号)> nul 
if not exist nul 注释内容(不能出现重定向符号和管道符号) 
:注释内容(注释文本不能与已有标签重名) 
rem 可以用作行间注释(不能出现重定向符号和管道符号)%注释内容% 
goto 标签 注释内容(可以用作说明goto的条件和执行内容)
:标签 注释内容(可以用作标签下方段的执行内容) 
pause

运行结果:

bat设置echo输出颜色 bat中echo_windows_05

3、重定向符号 > 和 >>

在 bat 中,重定向符号 > 和 >> 用于将某条命令的输出写到指定的地方,如写入到文件、nul(空设备)。

重定向符号 >

在批处理中 > 符号实现重定向,可将命令的输出写入到指定的文件或者nul(nul 是空设备名,像个黑洞,往往用来屏蔽错误输出等) 等位置。
注意:> 符会覆盖文件中已有的内容。
**实例:**将 ping 命令的输出信息输出到 ping.txt 文件。

@echo off
ping www.baidu.com > ping.txt
ping www.hao123.com > ping.txt
echo finished
pause

运行结果:

bat设置echo输出颜色 bat中echo_运维_06


在脚本的当前目录下生成了一个ping.txt文件,ping.txt的内容只有一条ping的结果,因为第一条ping命令被第二条ping命令的输出内容给覆盖了。

重定向符号 >>

>> 符号和 > 符号作用类似,也可将命令的输出写入到指定的文件或nul等位置,不同的是,>> 符号会将当前命令的结果直接追加到指定文件的最后面。实例:将 ping 命令的结果写入到 ping.txt 文件。

@echo off
ping www.baidu.com >> ping.txt
ping www.hao123.com >> ping.txt
echo finished
pause

运行结果:

bat设置echo输出颜色 bat中echo_windows_07


保存了两条ping命令的结果。

屏蔽批处理错误

假如我们在写脚本的时候,写错了,比如下面的脚本copy写成了coyp;

@echo off
coyp a.txt bak/b.txt
if %errorlevel%==0 (
    echo SUCCESS) 
    else (
        echo ERROR)
pause

运行结果:

bat设置echo输出颜色 bat中echo_批处理_08


结果中输出了 “‘coyp’ 不是内部或外部命令,也不是可运行的程序或批处理文件” 错误信息,这里可以使用重定向符号隐藏这个错误信息,脚本如下:

@echo off
coyp a.txt bak/b.txt >nul 2>nul
if %errorlevel%==0 (
    echo SUCCESS) 
    else (
        echo ERROR)
pause

运行结果:

bat设置echo输出颜色 bat中echo_批处理_09


>nul 2>nul 是把命令执行的输出信息和错误信息不输出到屏幕,而是输出到一个根本不存在的设备,>nul 等效于 1>nul,>nul 前面的 1 表示输出流,2 表示错误流(1可以省略不写)

4、批处理文件参数

批处理脚本中可引用的参数为 %0~%9,%0 是指批处理文件的本身,也可以说是一个外部命令;%1~%9是批处理参数,也称形参。
实例演示:

@echo off
echo 参数0=%0
echo 参数1=%1
echo 参数2=%2
echo 参数3=%3
echo 参数4=%4
echo 参数5=%5
echo 参数6=%6
echo 参数7=%7
echo 参数8=%8
echo 参数9=%9
pause

将上面脚本保存到 1.bat 文件,然后打开cmd窗口,切换到Desktop(桌面)目录下,输入 “1.bat A B C D E F G H I”敲回车,运行结果:

bat设置echo输出颜色 bat中echo_运维_10

接收多于 %1~%9 个参数

假如替换形参的实参超过了批处理脚本中所规定数值(9个,1%到%9共9个)且想在批处理文件中应用这些实参的话,可以用shift 命令来实现。
实例演示用 shift 命令接收更多参数:

@echo off
echo   %1 %2 %3 %4 %5 %6 %7 %8 %9
shift /0   
echo   %1 %2 %3 %4 %5 %6 %7 %8 %9
shift /1   
echo   %1 %2 %3 %4 %5 %6 %7 %8 %9
shift /2   
echo   %1 %2 %3 %4 %5 %6 %7 %8 %9
shift /3   
echo   %1 %2 %3 %4 %5 %6 %7 %8 %9
shift /4   
echo   %1 %2 %3 %4 %5 %6 %7 %8 %9
shift /5   
echo   %1 %2 %3 %4 %5 %6 %7 %8 %9
shift /6   
echo   %1 %2 %3 %4 %5 %6 %7 %8 %9
shift /7   
echo   %1 %2 %3 %4 %5 %6 %7 %8 %9
shift /8   
echo   %1 %2 %3 %4 %5 %6 %7 %8 %9
pause

将上面脚本保存到 1.bat 文件,然后打开cmd窗口,切换到Desktop(桌面)目录下,输入 “1.bat A B C D E F G H A M N D W F G J K K J I”敲回车,运行结果:

bat设置echo输出颜色 bat中echo_运维_11