Windows系统bat批处理特殊命令(二)
四、特殊命令
1、if 命令
(1)格式:if [not] exist [ 路径 /]文件名 待执行的命令
如果有指定的文件,则条件成立,运行命令,否则运行下一句。
eg: if exist c:/config.sys type c:/config.sys //表示如果存在c:/config.sys 文件,则显示它的内容
(2)格式: if errorlevel < 数字 > 待执行的命令
很多 DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态 ),通过 if errorlevel 命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令 ( 返回值必须按照从大到小的顺序排列 )。如果返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。IF ERRORLEVEL是用来测试它的上一个 DOS命令的返回值的,注意只是上一个命令的返回值,而且返回值必须依照从大到小次序顺序判断。如下的例子,先判断返回值为 1 的,再判断返回值为 0 的。
eg: IF ERRORLEVEL1 ECHO 文件拷贝失败
eg: IF ERRORLEVEL0 ECHO 成功拷贝文件
(3) if number 比较符 value command
== 等于
EQU 等于
NEQ 不等于
LSS 小于
LEQ 小于或等于
GTR 大于
GEQ 大于或等于
(4)if defined test command //如果定了了变量 test,则执行 command。
eg: if defined test echo It is defined.
(5)if 条件 1 (command1) else (command2) // 条件 1 后的命令行必须有括号。
在 if 后,若要执行多条命令,可以将这些命令放在一对括号中,且左括号必须跟 if 关键字在同一行,如:
cd /d :/slfslfsl
if errorlevel 1 (
mkdir d:error
mkdir d:
mkdir d:)
2、 goto 命令
批处理文件运行到这里将跳到 goto 所指定的标号 (标号即 label , 标号用 : 后跟标准字符串来定义 ) 处, goto 语句一般与 if 配合使用, 根据不同的条件来执行不同的命令组。
如: goto end
:end
echo this is the end
标号用 ":字符串 " 来定义,标号所在行不被执行。在有多个标号时,每个标号都要有 goto 语句跳出,否则各个标号程序会连续执行。
3、 for 命令:
对一个或一组文件,字符串或命令结果中的每一个对象执行特定命令,达到我们想要的结果。注意:在批处理文件中使用 FOR命令时,指定变量请使用 %%variable,而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I。
格式:FOR [参数 ] %%变量名 IN (相关文件或命令) DO执行的命令
for 命令可以带参数或不带参数,带参数时支持以下参数 :/d /l /r /f 语法:
(1) 不带参数:
FOR %%variable IN (set) DO command [command-parameters]
%%variable 指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。 可以使用通配符。 //不带参数时, 只指文件。
command 指定对每个文件执行的命令。
command-parameters 为特定命令指定参数或命令行开关。
DO后面可以跟 if 等其他命令,需要用 () 括起来。
eg :
for %%i in (t*.*) do echo %%i -- 显示当前目录下与 t*.* 相匹配的文件 (只显示文件名,不显示路径 )
for %%i in (d:mydocuments*.doc) do @echo %%i -- 显示该目录下与 *.doc 相匹配的文件
(2) 带有参数时:
1) 参数 /d (参数只能显示当前目录下的目录名字 )
格式:FOR /D %variable IN (set) DO command [command-parameters]
这个参数主要用于目录搜索 ,不会搜索文件 ,/D 参数只能显示当前目录下的目录名字。(特别说明:只会搜索指定目录下的目录,不会搜索再下一级的目录。 )
for /d %%i in (c:*) do echo %%i -- 显示 c 盘根目录下的所有目录
for /d %%i in (???) do echo %%i -- 显示当前目录下名字只有 1-3 个字母的目录
2) 参数 /R (搜索指定路径及所有子目录中与 set 相符合的所有文件 )
格式:FOR /R [[drive:]path] %variable IN (set) DO co mmand [command-parameters] 此命令会搜索指定路径及所有子目录中与set 相符合的所有文件,注意是指定路径及所有子目录。set 中的文件名如果含有通配符 (?或 *) , 则列举 /R 参数指定的目录及其下面的所有子目录中与 set 相符合的所有文件, 无相符文件的目录则不列举。
3) 参数 /L (该集表示以增量形式从开始到结束的一个数字序列。可以使用负的 Step)
格式:FOR /L %variable IN (start,step,end) DO command [command-parameters]
for /l %%i in (1,1,5) do @echo %%i --输出 1 2 3 4 5// 从1 开始,递增1,最大值为5
4) 参数 /F(主要用来处理文件内容或命令的输出结果, /F 默认将每行作为一个元素来处理。)
格式:FOR /F ["options"] %%i IN (file) DO command // file 代表一个或多个文件。 for 会依次将file 中的文件打开,并且在进行到下一个文件之前将每个文件读取到内存,将每行作为一个的元素,
%%i代表这个元素。忽略空白的行。
FOR /F ["options"] %%i IN ("string") DO command // string 代表字符串
FOR /F ["options"] %%i IN ('command') DO command // command 代表命令。命令行需要用单引号。
["options"] 可选
4、 set 命令:设置变量
(1) set 显示环境变量
set 会显示当前所有的系统环境变量
set c 会显示所有以 c 或 C开头的变量。 ( 即:不区分大小写 )
set com 显示所有以 com或 Com开头的变量
(2) set 设置环境变量
如:set str=ok // 就是将变量 str 的值设置成字符串“ OK”注:如果在变量值中有特殊字符,则 set 后面的表达式需要用双引号括起来。如: set “str=ok> ”
(3) 带参数 /a 的 set 数值计算
set 的/A 参数就是让 SET可以支持数学符号进行加减等一些数学运算 。支持的数学运算包含(优先权递减) :
() // 分组
! ~ // 一元运算符
* / % // 算数运算符
+ // 算数运算符
<<>> // 逻辑移位
& // 按位“与”
^ // 按位“异”
| // 按位“或”
= *= /= %= += -= // 赋值
&= ^= |= <<= >>=
, // 表达式分隔符
如: set /a var=10-2 // 结果: var=8 ,如果没有 /a ,则 var 的值是字符串 10-2
set /a var=2*2
set /a var=2/2
set /a var=(1+1)+(1+1)
set /a a=1+1,b=2+1,c=3+1 // 使用“,”将表达式分隔。
echo %a% %b% %c%
注意:逻辑运算符和取余操作符需要用双引号括起来 , 如:
set /a var=1 “&” 1
set /a var=1 “%” 1
set /a var=2 “<<” 2
(4) 带参数 /p 的 set 命令:允许变量值是用户的输入行
如:set /p str=Please input you string.
echo Your input is: %str%.
注意: set /p 的特殊用法set /p=A // 直接显示等号后面的内容,相当于 echo A. 但是显示内容后需要手动按回车键后才能继续执行下一条语句。set /p=A<null // 显示内容并不带回车。即:显示完后立即执行下一条语句。由于没有回车,下一条语句的输出会跟在这条语句的后面。
@echo off
for /l %%i in (1 1 300) do (
set /p=O<null // 输出字母 O
for /l %%ain (1 1 280) do ver>null) // 利用 for 循环运行 ver>null
来达到延时的目的。其中 ver 是显示当前命令行窗口版本的命令。也可以将 var 换位 help,time /t 等其他命令。
pause>null
(5) 字符串截取
格式: set a=%var:~start,len% // 从变量 var 的值的 start 位开始截取, 一共截取 len 位。若 start 或 len 为负数,表示从倒数第几位开始截取或截取倒数几位。位数的表示是从 0 开始的。
@echo off
set var=www.baidu.com
set a=%var:~1,2%
echo %a%
pause>null
从第 1 位( 也即第二个字符 ) 开始,截取 2 个字符。
%var:~5% // 从第 6 开始,截取剩下所有字符。
%var:~-3% // 截取倒数 3 位
%var:~0,-len% // 截取从第一位开始,倒数第 len 位结束的字符。
eg:
@echo off
::以“YYYYMMDD”格式取出当前时间。
set BACKUPDATE=%date:~0,4%%date:~5,2%%date:~8,2%
扫一扫,关注我们