简单批处理语法结构
选择语句
- 字符串比较
仅能够对两个字符(串)是否相同、先后顺序进行判断等
Usage: if [not] string1 compare-op string2 command1 [else command2] Compare-op: == 等于 EQU 等于 NEQ 不等于 LSS 小于 LEQ 小于或等于 GTR 大于 GEQ 大于或等于 Sample: set /p choice=是否显示当前时间?(y/n) if /i not %choice% EQU n echo 当前时间是:%date% %time% pause>nul
- 存在判断
存在判断的功能是判断文件或文件夹是否存在
Usage: if [not] exist filename command1 [else command2] Sample: if not exist %~df0 ( echo 文件夹%~df0不存在! ) else echo 文件夹%~df0存在!注意:注意if语句的多行书写,多行书写要求command1的左括号必须和if在同一行、else必须和command1的右括号同行、command2的左括号必须与else同行、command1和command2都可以有任意多行,即command可以是命令集。
- 定义判断
定义判断的功能是判断变量是否存在,即是否已被定义
Usage: if [not] defined variable command1 [else command2] Sample: if not defined var (echo var=11)
- 结果判断
对上一个命令运行的结果进行判断处理,而上一个命令运行的结果放在errorlevel变量中
Sample: masm %1.asm if errorlevel 1 pause & edit %1.asm link %1.objPs:[错误码为1]
循环语句
- 无开关
无开关的for语句能够对设定的范围内进行循环,是最基本的for循环语句
Usage: FOR %%variable IN (set) DO command Sample: @echo off for %%i in (a,"b c",d) do echo %%i pause>nul
- 开关/L
含开关/L的for语句,可以根据set里面的设置进行循环,从而实现对循环次数的直接控制
Usage: FOR /L %%variable IN (start,step,end) DO command Sample: @echo off for /l %%i in (1,2,10) do md %%i pause
- 开关/F
含开关/F的for语句具有最强大的功能,它能够对字符串进行操作,也能够对命令的返回值进行操作,还可以访问硬盘上的ASCII码文件,比如txt文档等
Usage: FOR /F ["options"] %%variable IN (set) DO command Parameters: options是(eol=c、skip=n、delims=xxx、tokens=x,y,m-n、usebackq)中的一个或多个的组合 set为("string"、'command'、file-set)中的一个 Sample: @echo off echo 本文件夹里面的文件有: for /f "skip=5 tokens=3* delims= " %%a in ('dir') do ( if not "%%a"=="<DIR>" if not "%%b"=="字节" if not "%%b"=="可用字节" echo %%b ) pause
- 开关/D或/R
含开关/D或/R的for语句是与目录或文件有关的命令,一般情况下很少使用。含开关/R的命令有时候被用于通过遍历文件夹来查找某一个文件或文件夹
Sample: @echo off set local enabledelayedexpansion FOR /R d: %%i IN (.) DO ( set dd=%%i set "dd=!dd:~0,-1!" echo !dd! ) pause注:感叹号其实就是变量百分号(%)的强化版。之所以要用!而不用%,是因为在for循环中,当一个变量被多次赋值时,%dd%所获取的仅仅是dd第一次被赋予的值;要想刷新dd的值,就必须首先通过命令"setlocal enabledelayedexpansion"来开启延迟变量开关,然后用!dd!来获取dd的值。