今天芒果要跟大家一起介(tu)绍(cao)一下bat批处理命令~
批处理文件,顾名思义,是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD。这些命令统称批处理命令。
首先给大家大概介绍一下我们常用的几个命令:
1、rem和::
rem为注释命令,一般用来给脚本加上注释,rem命令后内容不会被执行,但是能回显。
::也可以起到注释作用,而且看起来也会更加简洁明了,跟其他语言的注释服类似,但是::后的命令不会回显。(这里要注意一下在批处理脚本里,:被视为标记,当:后紧跟一个以字母开头的字符串时,可以被goto语句识别,如果紧跟非字母的特殊符号时,goto语句无法识别,即可以起到注释的作用)
例:
rem this is a note
:: this is a note
2、echo和@
echo命令可以用来显示消息,和打开或关闭回显功能。
显示消息:
echo Hello world!
打开或者关闭回显:
echo on/off
将@字符放在命令前面可以关闭这条命令的回显,无论此时回显功能是关闭还是打开。所以我们经常能在bat脚本第一行看到@echo off,这样整个脚本的命令都不会回显。
3、pause
pause的意思是暂停,顾名思义,这条命令意思就是系统停止执行下面的命令。例:pause
运行时会显示:
请按任意键继续. . .
此条命令我们经常在goto语句、if语句或者for语句中看到。
4、goto
goto的意思是跳转,在bat脚本中我们使用“:label”来构建一个标签,然后可以使用“goto label”跳转到“:label”处(这里label是指定批处理程序中用作标签的文字字符串),标签必须单独一行。例:
@echo off
if "%1"=="A" (goto A) else goto B
:A
echo 您输入的字母是:A
pause
exit
:B
echo 您输入的字母是:B
pause
exit
5、call
call命令可以从批处理程序调用另一个批处理程序,当执行完后,再执行原来的批处理。命令格式:
call [drive:][path] filename [batch-parameters]
[drive:][path] filename指定要调用批处理程序的位置和名称,filename必须是.bat或者.cmd扩展名文件。batch-parameters指定批处理程序的参数项。
例:
test1.bat:
call test2.bat A B
echo C
test2.bat:
echo %1
echo %2
显示结果应该为
A
B
C
6、start
start命令用来调用外部程序,所有的DOS命令和命令程序都可以由start命令来调用。该外部程序将在新窗口中运行,bat脚本会继续执行下去,不理会外部程序的运行状况。
例:start"C:Program Filesinternet exploreriexplore.exe" “https://www.baidu.com/”
7、if
if命令执行bat脚本里的条件处理,这里需要注意(吐槽的是),判读与执行语句要么放在同一行:
if 判断语句 (执行语句1) else 执行语句2
如果想要以多行输入,必须以这种形式(对于一个强迫症实在无法忍受),否则就会报错:
If 判断语句 (
执行语句1
) else (
执行语句2
)
这里需要注意一下比较运算符与其他语言不同:
EQU - 等于 (一般使用“==”)
NEQ - 不等于 (没有 “!=”,改用“ if not 1==1 ”的写法)
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
例:if"%1"=="A" (echo A) else echo B
8、for
for命令是对一组文件中的每一个文件执行某个特定命令。命令格式:
for %variable in (set) do command[command-parameters]
其中%variabl是指定一个单一字母可替换的参数;
(set)指定一个或一组文件,可以使用通配符;
command指定对每个文件执行的命令;
command-parameters为特定命令指定参数或命令行开关。
例:for %%i in (1 2 3 4 5) do (echo %%i)
如果启用命令扩展,则会支持下列for命令的其他格式:
for /D %variable in (set) do command[command-parameters]
如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。
例:for %%d in (*.txt) do (echo %%d)
显示当前目录下所有的.txt文件
例:for /D %%d in (*test*) do (echo %%d)
显示当前目录下所有包含有test的目录名
for /R [[drive:]path] %variable in(set) do command [command-parameters]
检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。如果在 /R 后没有指定目录规范,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。
例:for /R C:UsersDesktop %%d in (*.txt) do (echo %%d)
显示桌面所有的.txt文件
FOR /L %variable IN (start,step,end)DO command [command-parameters]
该集表示以增量形式从开始到结束的一个数字序列。
例:for /L %%i in (1,2,10) do echo %%i
会显示1、3、5、7、9
for /F ["options"] %variablein (file-set) do command [command-parameters]
for /F ["options"] %variablein ("string") do command [command-parameters]
for /F ["options"] %variablein ('command') do command [command-parameters]
file-set为一个或多个文件名。继续到 file-set中的下一个文件之前,每份文件都被打开、读取并经过处理。处理包括读取文件,将其分成一行行的文字,然后将每行解析成零或更多的符号。然后用已找到的符号字符串变量值调用for 循环。以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白行。你可通过指定可选 "options" 参数替代默认解析操作。这个带引号的字符串包括一个或多个指定不同解析选项的关键字。这些关键字为:
eol=c - 指一个行注释字符的结尾(就一个)
skip=n - 指在文件开始时忽略的行数。
delims=xxx - 指分隔符集。这个替换了空格和制表符的默认分隔符集。
tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会 导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。
usebackq - 指定新语法已在下类情况中使用:在作为命令执行一个后 引号的字符串并且一个单引号字符为文字字符串命令并允 许在 file-set中使用双引号扩起文件名称。
例:for /F "eol=; tokens=2,3* delims=, " %%i in (test.txt) do @echo %%i %%j %%k
会分析test.txt 中的每一行;
eol=; --忽略以分号打头的那些行;
tokens=2,3* --将每行中的第二个和第三个符号传递给 for 程序体;
delims= , --用逗号和/或空格定界符号。
%i --这个 for 程序体的语句引用 %i 来取得取得的首个字符串(本例中为第二个符号),引用 %j 来取得第二个字符串(本例中为第三个符号)引用 %k来取得第三个符号后的所有剩余符号。