Bat脚本 - (二)- for命令的使用

for 命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。
   1) for {%variable | %%variable} in (set) do command [command-parameters]
      %variable 指定一个单一字母可替换的参数。变量名称是区分大小写的,所以 %i 不同于 %I
      在批处理文件中使用 FOR 命令时,指定变量建议用 %%variable而不要用 %variable。
      (set) 指定一个或一组文件。可以使用通配符。
      command 指定对每个文件执行的命令。
      command-parameters 为特定命令指定参数或命令行开关。
   2) 如果命令扩展名被启用,下列额外的 FOR 命令格式会受到支持:
      a.FOR /D %variable IN (set) DO command [command-parameters]
        如果集里面包含通配符,则指定与目录名匹配,而不与文件名匹配。
      b.FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
        检查以 [drive:]path 为根的目录树,指向每个目录中的FOR 语句。
        如果在 /R 后没有指定目录,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。
      c.FOR /L %variable IN (start,step,end) DO command [command-parameters]
        该集表示以增量形式从开始到结束的一个数字序列。
        如:(1,1,5) 将产生序列 1 2 3 4 5;  而(5,-1,1) 将产生序列 (5 4 3 2 1)。
      d.有或者没有 usebackq 选项:
        FOR /F ["options"] %variable IN (file-set) DO command
        FOR /F ["options"] %variable IN ("string") DO command
        FOR /F ["options"] %variable IN (command)  DO command
    参数"options"为:
        eol=c           - 指一个行注释字符的结尾(就一个,如“;”)
        skip=n          - 指在文件开始时忽略的行数。
        delims=xxx      - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。
        tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。
                          m-n格式为一个范围。通过 nth 符号指定 mth。
              如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。
        usebackq        - 指定新语法已在下类情况中使用:
                          在作为命令执行一个后引号的字符串并且一个单引号字符为文字字符串命令并允许在 filenameset中使用双引号扩起文件名称。
   3) Sample:
      1. 如下命令行会显示当前目录下所有以bat或者txt为扩展名的文件名。
         for %%c in (*.bat *.txt) do (echo %%c)
      a. 如下命令行会显示当前目录下所有包含有 e 或者 i 的目录名。
         for /D %%a in (*e* *i*) do echo %%a
      b. 如下命令行会显示 E盘test目录 下所有以bat或者txt为扩展名的文件名。
         for /R E:\test %%b in (*.txt *.bat) do echo %%b
         for /r %%c in (*) do (echo %%c)  :: 遍历当前目录下所有文件
      c. 如下命令行将产生序列 1 2 3 4 5
         for /L %%c in (1,1,5) do echo %%c
      d. 以下两句,显示当前的年月日和时间
         For /f "tokens=1-3 delims=-/. " %%j In ('Date /T') do echo %%j年%%k月%%l日
         For /f "tokens=1,2 delims=: " %%j In ('TIME /T') do echo %%j时%%k分
      e. 把记事本中的内容每一行前面去掉8个字符
         setlocal enabledelayedexpansion
         for /f %%i in (zhidian.txt) do (
	   set atmp=%%i
	   set atmp=!atmp:~8!
           if {!atmp!}=={} ( echo.) else echo !atmp!
         )
         :: 读取记事本里的内容(使用 delims 是为了把一行显示全,否则会以空格为分隔符)
         for /f "delims=" %%a in (zhidian.txt) do echo.%%a
   4) continue 和 break
      利用 goto 实现程序中常用的 continue 和 break 命令, 其实非常简单
      continue: 在 for 循环的最后一行写上一个标签,跳转到这位置即可
      break: 在 for 循环的外面的下一句写上一个标签,跳转到这位置即可
      Sample: (伪代码)
        for /F ["options"] %variable IN (command)  DO (
        ... do command ...
        if ... goto continue
        if ... goto break
        ... do command ...
        :continue
        )
        :break
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值