文章目录
介绍
批处理采用了一些特殊的流程控制命令(如if
、for
及goto
等)来完成指令的执行,本文将详细介绍批处理各个流程控制命令语法与功能,并通过简单的批处理示例来讲解说明,以帮助读者更好的上手。
具体命令
了解echo命令的语法及应用
“echo”命令可用于在屏幕上显示相关文字信息,该命令还可用于控制批处理文件在执行的过程中是否回显命令本身。
命令格式: echo [{on|off}][message]
参数说明如下。
- on:允许批处理文件在执行的过程中回显命令
- off:禁止批处理文件在执行的过程中回显命令
- message:表示需要显示在屏幕的信息
- /?:在命令提示符显示帮助
示例
echo on
type a.txt
echo 现在关闭命令显示!!!!
echo off
type a.txt
了解@命令的语法及应用
“@”是一个非常简单的命令,它用于禁止当前执行的命令回显在屏幕上。“@”不受“echo”命令设置效果的影响,且该命令本身不会回显在屏幕上。
命令格式: @ [command]
参数说明如下。
- command:要屏蔽回显的命令
- 当命令不加任何参数执行时,将不产生任何效果
示例
@echo on
@type a.txt
type a.txt
“@”与“echo”的主要区别在于:前者只对当前命令行起作用,且不受“echo”命令设置影响;“echo”命令则影响设置之后的所有命令,一直到出现另一个“echo”命令改变状态为止
了解goto命令的语法及应用
“goto”是一个流程控制转向命令,它用于控制批处理中的命令执行流程。
命令格式: goto label
参数说明如下。
- label:表示批处理文件中某行,该行表示批处理文件新的执行点
示例
@echo off
echo 跳过中间的命令,只最后一条命令
goto last
dir
type a.txt
:last
dir a.txt
批处理中的标号通常单独占一行,标号行以“:”号开头并紧根标识符,这个标识符将用在“goto”语句后。标识符中不能含有逗号、冒号等,但可以使用空格。标识符的有效长度最大为8个字符,如果多于8个字符则只使用前8个字符
理解pause命令的语法及应用
“pause”命令用于暂停批处理的执行并给出提示信息,然后由用户决定是继续执行还是中断执行。
命令格式: pause
参数说明如下。
- pause:此命令非常简单,无需任何参数。当命令运行后,会中断执行的语句
示例
@echo off
echo pause 命令测试......
pause
type a.txt
了解call命令的语法及应用
“call”是一个功能强大的命令,它不但可在批处理中调用另一个批处理,而且还可以调用指定标号处后面的所有命令。
命令格式: call[[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]
参数说明如下。
- [Drive:][Path] FileName:指定被调用的批处理文件名,当别调用的批处理文件与已经执行的批处理文件都处于同一目录下时,可以申领盘符及路径
- :label:用于指定调用位置的标签,与
goto
语句中使用的标签类似 - arguments:对于以“
:label
”开头的批处理程序,指定要传递给其新实例的命令行信息,包括命令行选项、文件名、批处理参数或变量 - /?:在命令提示符显示帮助
示例
@echo off
echo 正在调用called.bat......
call called.bat
echo called.bat调用完毕!
echo 现在开始调用“xx”标号后的语句....
call :xx
:xx
echo 在xx标号后的命令......
# called.bat文件内容
@echo off
@echo 已经进入called.bat中......
type a.txt
“call”命令在使用标号时,标识符前必须加上“:”号,而“goto”命令中则不用加;此外,使用“call”命令转向标号并执行到文件结束时,会返回调用处继续预先下面的命令,而“goto”命令跳转后不在返回
了解start命令的语法及应用
“start”命令用于重新启用一个单独的命令行串口,然后在新窗口中执行指定的程序或命令。
命令格式: start ["title"] [/dPath] [/i] [/min] [/max] [{/separate | /shared}] [{/low | /normal | /hight | /realtime | /abovenormal | /belownormal}] [/wait] [/b] [FileName] [parameters]
参数说明如下。
- title:指定在“命令提示符” 窗口标题栏中显示的标题
- /dPath:指定启动目录
- /i:将
Cmd.exe
启动环境传送到新的“命令提示符”窗口 - /min:启动新的最小化“命令提示符”窗口
- /max:启动新的最大化“命令提示符”窗口
- /separate:在单独的内存空间启动
16
为程序 - /shared:在共享的内存空间启动
16
位程序 - /low:以空闲优先级启动应用程序
- /normal:以一般优先级启动应用程序
- /high:以高优先级启动应用程序
- /realtime:以实时优先级启动应用程序
- /abovenormal:以超出常规优先级的方式启动应用程序
- /belownormal:以对于常规优先级的方式启动应用程序
- /wait:启动应用程序,并等待其结束
- /b:启动应用程序时不必打开新的“命令提示符”窗口。除非应用程序启用【
CTRL+C
】,否则将忽略【CTRL+C
】操作。使用【CTRL+BREAK
】中断应用程序 - FileName:指定启动的命令或程序
- parameters:指定要传递给命令或程序的参数
- /?:在命令提示符显示帮助
示例
@echo off
echo 将在新窗口中显示a.txt文件的内容
start "a.txt内容" /wait type a.txt
echo 已从新命令行窗口返回......
了解rem命令的语法及应用
“rem”是一个注释命令,它用于在批处理中加入相应的说明信息,这些信息可以帮助阅读者理解批处理的功能。
命令格式: rem [comment]
参数说明如下。
- comment:指定要作为注释的任何字符串
- /?:在命令提示符显示帮助
示例
@echo off
rem 这是一个简单的批处理程序
type a.txt
dir *.rm
使用“rem”命令时,应该将回显状态关闭,否则会将“rem”命令的整行信息输出到屏幕
了解if命令的语法及应用
“if”是一个非常重要的命令,它通过条件来决定批处理应该如何执行。在制作复杂批处理时,“if”是一个必不可少的命令。
命令格式: if [not] errorlevel number command [else expression]
命令格式: if [not] string1==string2 command [else expression]
命令格式: if [not] exist filename command [else expression]
命令格式: if [/i] string1 compareop string2 command [else expression]
命令格式: if cmdextversion number command [else expression]
命令格式: if definded variable command [else expression]
参数说明如下。
- not:指定只有当条件为假时才执行该命令
- errorlevel number:只有当由
Cmd.exe
运行的前一个程序返回大于或等于number
的退出代码时,才能指定条件为真 - command:指定只有满足前面的条件时才应执行的命令
- string1==string2:只有当
string1
和string2
相同时才指定真条件 - exist filename:如果
filename
存在,则指定真条件 - compareop:指定
3
个字母的比较运算符。其中,“EQU
”代表等于、“NEQ
”代表不等于、“LSS
”代表小于、“LEQ
”代表小于或等于、“GTR
”代表大于、“GEQ
”代表大于或等于。 - /i:强制字符串比较忽略大小写
- cmdextversion number:只有当与
Cmd.exe
的“命令扩展”功能相关的内部版本号等于或大于number时,才指定真条件。第一个版本是1
。当命令扩展的功能由重大增强时,则在此号码上加1
。当禁用了命令扩展(默认情况下是启用),cmdextversion
条件不为真 - definded variable:如果定义了
variable
,则指定条件为真 - expression:指定将传递给
else
子语句中命令的命令行命令和任何参数 - /?:在命令提示符显示帮助
示例
@echo off
if exist a.txt (echo 找到了a.txt文件,其内容为:
type a.txt) else (echo 找不到a.txt文件。)
当“if”命令中带有“else”子命令,“else”子命令一定要放在“if”中的最后一个命令在同一行,否则会出现错误;此外,当“if”或“else”后面跟有多条命令时,应该用小括号将其括起来
了解set命令的语法及应用
“set”是专门用来创建、设置、查看或删除环境变量。对于一些功能复杂的批处理,自定义变量是不可缺少的。
命令格式: set [[/a [expression]][/p [variable=]] string]
参数说明如下。
- /a:将
string
设置成可求值的数字表达式 - expression:合法的表达式
- /p:将
variable
的值设置成输入行 - varable:指定需要设置或修改的变量
- string:指定要与指定变量管理的字符串
- /?:在命令提示符显示帮助
示例
@echo off
set xxx="c:\"
echo 显示所有以字母x开头的变量......
set x
dir /w %xxx%
rem 删除名称为xxx的变量
set xxx=
批处理文件中使用变量时,应该在变量名前后分别加上一个%(百分号),否则无法正确使用变量
了解setlocal命令的语法及应用
“setlocal”命令可在批处理运行时设置自己的临时变量环境,从而不影响系统的变量环境设置。
命令格式: setlocal {enableextension | disableextensions} {enabledelayedexpansion | disabledelayedexpansion}
参数说明如下。
- enableextension:启用命令扩展,直到出现匹配的
endlocal
命令,无论setlocal
命令之前的设置如何 - disableextensions:禁用命令扩展,直到出现匹配的
endlocal
命令,无论setlocal
命令之前的设置如何 - enabledelayedexpansion:启用延迟的环境变量扩展,直到出现匹配的
endlocal
命令,无论setlocal
命令之前的设置如何 - disabledelayedexpansion:禁用延迟的环境变量扩展,直到出现匹配的
endlocal
命令,无论setlocal
命令之前的设置如何 - /?:在命令提示符显示帮助
示例
@echo off
setlocal
path=d:\
echo 局部环境变量path的值:
set path
endlocal
echo 系统环境变量path的值:
set path
“setlocal”与“endlocal”命令联合使用给,“endlocal”命令用于结束临时变量环境并回到系统变量环境
了解shift命令的语法及应用
“shift”命令用于更改批处理文件处理参数的方式,如指定起始处理参数的位置等。
命令格式: shift [/n]
参数说明如下。
- /n:设置批处理从第
n
个参数开始移位,n
的值介于0
到8
之间 - /?:在命令提示符显示帮助
示例
@echo off
:round
if "%1"=="" goto end
echo %1内容如下:
type %1
echo.
shift
goto round
:end
对于本例执行的命令,可以直接使用%1、%2、%3来显示相应的文件内容,但本例可以处理任意多个参数,具有一定通用性
了解for命令的语法及应用
“for”是批处理中一个功能强大、复杂命令,它可对一组不同的文件或数据进行循环处理。
命令格式: for {%variable|%%variable} in (set) do command [CommandLineOptions]
参数说明如下。
- %variable|%%variable:代表可替换的参数。使用
%variable
通过命令提示符执行for
命令,使用%%variable
在批处理文件中执行for
命令 - set:指定要用指定命令处理的一个或多个文件、目录、数值范围及文本字符串
- command:指定要对包括在指定(
set
)中的每个文件、目录、数值范围及文本字符串所执行的命令 - CommandLineOptions:指定要通过指定命令使用的任何命令行选项
- /?:在命令提示符显示帮助
示例
@echo off
set /a sum=0
for %%x in (*.txt) do (
echo %%x文件的内容如下:
type %%x
echo.
set /a sum=sum+1
)
echo 一共显示了%sum%个文本文件!
在循环体中可以对“for”后的变量直接引用,这种引用与使用“set”命令定义的变量不同,“for”后的变量区分大小写
通配符(“*”、“?”)的应用
“*”及“?”是两个非常重要的表示符,利用者两个表示符可以灵活的表示文件及目录。其中,“*”代表任意多个字符(包括零个字符),“?”代表任意的那个字符。
示例
@echo off
if exist *.txt echo 当前文件夹下有文本文件!
echo 以p开头的目录如下:
dir /d /w /b p*
echo.
echo 以dk开头、第三个字符为任意字符、第四个字符为t、扩展名称为三个字符且以do开头的文件如下:
dir /d /w dk?t.do?
重定向(“<”、“>”、“>>”)的应用
“<”、“>”及“>>”是批处理中的三个重定向符合,用于控制数据的输入或输出方式。“<”符号的右边是数据源,左边代表数据的目的地;“>”及“>>”符号的左边是数据源,“>”会替换目的数据,而“>>”符号只是将数据源添加到目的数据后。
示例
@echo off
echo 正在自动创建的批处理......
echo echo 进入auto.bat批处理文件中......
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 off
find "copyright" gp1.txt | sort >result.txt
echo 对包含"copyright"的单词的行排序如下:
type result.txt
gp1.txt可自行找一篇文章,然后找个一个关键词来进行测试,此文关键词是"copyright"
总结
以上简单介绍了批处理中的一些常用命令,通过此文简单记录学习过程。其中,像“for”只是简单介绍,更高级的用法可自行研究。