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