bat批处理之for循环

 

本文对https://blog.csdn.net/qiuzhi__ke/article/details/78422424的skip,tokens,delims进行了补充,补充内容的参考网址:https://www.jb51.net/article/17928.htm

1.变量引用:
在cmd窗口中:
FOR %variable IN (set) DO command [command-parameters]
在Bat文件中:
FOR %%variable IN (set) DO command [command-parameters]
注:in和do之间的set表示的字符串或变量可以是一个,也可以是多个,每一个字符串或变量,我们称之为一个元素,
每个元素之间,用空格键、跳格键、逗号、分号或等号分隔。


2.带开关的for用法:
(1)含开关/L的for语句,可以根据set里面的设置进行循环,从而实现对循环次数的直接控制。其命令格式为:
FOR /L %%variable IN (start,step,end) DO command
其中,start为开始计数的初始值,step为每次递增的值,end为结束值。当end小于start时,step需要设置为负数。
例1.创建5个文件夹:

   @echo off
   for /l %%i in (1,2,10) do md %%i
   pause

//将新建5个文件夹,文件夹名称依次为1.3.5.7.9。

例2.1+2+3+...+100求和:

    @echo off

    set /a sum=0
    for /l %%i in (1,1,100) do set /a sum=sum+%%i
    echo %sum%
    pause


(2)含开关/F的for语句具有最强大的功能,它能够对字符串进行操作,也能够对命令的返回值进行操作,还可以访问硬盘上的ASCII码文件,比如txt文档等。其命令格式为:
FOR /F ["options"] %%variable IN (set) DO command
其中,set为("string"、'command'、file-set)中的一个;options是(eol=c、skip=n、delims=xxx、tokens=x,y,m-n、usebackq)中的一个或多个的组合。一般情况下,使用较多的是skip、tokens、delims三个选项。
skip=n - 从文本开始忽略n行
delims - 指定定界符
tokens -提取列。 
通俗讲,共同提取每一行的第m小节的内容。因此,可以用该命令来指定提取文本信息。 
tokens=                  提取全部。 
tokens=m               提取第m列。 
tokens=m,n            提取第m列和第n列。 
tokens=m-n            提取第m列至第n列。 
tokens=*                删除每行前面的空格。忽略行首的所有空格。 
tokens=m*             提取第m列以后的所有字符,星号表示剩余的字符。 
tokens=m,*            提取第m列以后的所有字符,星号表示剩余的字符。 

输出变量的个数由定义了的tokens决定。 
含开关/F的for语句举例:

    @echo off
  echo **No Options:
  for /f %%a in ("1,2,10") do echo a=%%a
  echo **Options tokens ^& delims:
  for /f "tokens=1-3 delims=," %%a in ("1,2,10") do echo a=%%a b=%%b c=%%c
  pause

 

  @echo off
  echo 本文件夹里面的文件有:
  for /f "skip=5 tokens=3* delims= " %%a in ('dir') do (       rem dir用"''"括起来系统才识别为命令
  if not "%%a"=="<DIR>" if not "%%b"=="字节" if not "%%b"=="可用字节" echo %%b
  )
  pause

注:上一个脚本中dir用一对单引号括起来才识别为命令 。

  @echo off
  echo 本文件夹里面的文件有:
  dir > c:\file.txt
  for /f "skip=5 tokens=3* delims= " %%a in (c:\file.txt) do (
  if not "%%a"=="<DIR>" if not "%%b"=="字节" if not "%%b"=="可用字节" echo %%b
  )
  del c:\file.txt
  pause


对于后面的两个例子,其中options里面的delims= 是可以删除的,因为只要添加了/F开关系统就将delims的值默认为空格。
符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。本例中也可以改为4,
不过文件名中有空格的文件,只能显示空格以前部分。同时我们也看到了,for语句的do后面的command也是可以分行的,只需要保证command的左括号和do在同一行就可以了。


(3)开关/D或/R
/D只可指定目录,/R参数之后还可带盘符及路径。含开关/R的命令有时候被用于通过遍历文件夹来查找某一个文件或文件夹,故而列举此例。
把f盘下所有.txt结尾文件替换为.bak结尾:

  @echo off
    path=f:\                                             rem 指定路径

    for /r %path% %%i in (*.txt) do ren %%i *.bak        rem 把f盘下所有.txt结尾文件替换为.bak结尾
    pause


  
(4)用法示例: 

a.搜索当前目录下所有的文本文件 : 

   rem 搜索当前目录下所有的文本文件
   @echo off
   for %%i in (*.txt) do echo "%%i"
   pause

b.批量创建学号为1812223001-1812223040.docx文档:

   @echo off
   for /l %%i in (1,1,9) do type nul > 181222300%%i.docx               rem 01-09
   for /l %%i in (10,1,40) do type nul > 18122230%%i.docx              rem 10-40
   pause

c.删除f盘的所有空目录:

dir /a:d查找属性为目录的

     /b舍弃标题与摘要内容,即只提取文件名

     /s递归遍历子目录

    @echo off
    path=f:

    for /f "delims=" %%i in ('dir /b /s /a:d %path%') do rd %%i
    pause
    

d.批量扫描IP:

    @echo off

    for /l %%i in (1,1,255) do ping 192.168.0.%%i
    pause>nul

 

  • 4
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值