简单批处理之语法结构

 |   

本文主要介绍批处理的语法结构以方便写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的值。
    
技术茶话会
< 前一篇 后一篇 >