简单批处理语法结构

选择语句

  • 字符串比较

仅能够对两个字符(串)是否相同、先后顺序进行判断等

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.obj
Ps:[错误码为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的值。
原文地址:https://www.cnblogs.com/happy-island/p/3310888.html