您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > 百科

DOS批处理命令:for循环详细说明及例子

时间:2021-12-27 14:37:44  来源:  作者:中微中科技

详细说明及例子 :

对一组文件中的每一个文件执行某个特定命令

普通格式:

FOR %variable IN (set) DO command [command-parameters]

  •  %variable 指定一个单一字母可替换的参数。
  •  (set) 指定一个或一组文件。可以使用通配符。
  •  command 指定对每个文件执行的命令。
  •  command-parameters 为特定命令指定参数或命令行开关。

在批处理程序中使用 FOR 命令时,指定变量请使用 %%variable而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.

范例:

如c:/temp/myfile.txt内容如下,共4行

  • ;a1,a2,a3,a4,a5
  • b1,b2,b3,b4,b5
  • c1 c2 c3 c4 c5
  • d1,d2,d3,d4,d5

例:for %i in (my*) do @echo %i 结果 :myfile.txt (显示文件名)

扩展格式:

FOR /D %variable IN (set) DO command [command-parameters]

如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配(只搜索指定目录下的目录,不再搜索指定目录下的目录的子目录,不搜索文件名)。

例:for /d %i in (*) do @echo %i 结果:是当前目录下的目录

DOS批处理命令:for循环详细说明及例子

 

FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]

检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。如果在 /R 后没有指定目录规范,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。

例:for /r %i in (*.txt) do @echo %i 列举当前目录下的所有txt文件:

DOS批处理命令:for循环详细说明及例子

不指定目录即为当前目录

例:for /r . %i in (.) do @echo %i 列举当前目录下的所有目录,含子目录:

DOS批处理命令:for循环详细说明及例子

 

例:for /r . %i in (5.txt) do @echo %i 列举当前目录下所有5.txt的文件:注意“子目录”下没此文件,但依然列出来了,因为“子目录”-“电影2”下有5.txt文件

DOS批处理命令:for循环详细说明及例子

 

例:for /r c:/tmp %i in (5.txt) do @echo %i 列举c:/tmp目录下所有的5.txt文件,但此目录及子目录下根本没有5.txt文件,结果列出来了目录结构

DOS批处理命令:for循环详细说明及例子

 

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)

  • 例子1:for /l %i in (1,1,5) do @echo %i 输出:1 2 3 4 5
  • 例子2:for /l %i in (5,-1,1) do @echo %i 输出:5 4 3 2 1
  • 例子3:for /l %i in (1,3,9) do @echo %i 输出:1 4 7

  • FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
  • FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
  • FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

 

fileset 为一个或多个文件名。继续到 fileset 中的下一个文件之前, 每份文件都被打开、读取并经过处理。处理包括读取文件,将其分成一行行的文字,然后将每行解析成零或更多的符号。然后用已找到的符号字符串变量值调用 For 循环。

以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号(既默认以空格作分隔符)。跳过空白行。你可通过指定可选 "options" 参数替代默认解析操作。这个带引号的字符串包括一个或多个指定不同解析选项的关键字。这些关键字为:

  •  eol=c - 指一个行注释字符的结尾(就一个),以c字符开头的行被忽略。
  •  skip=n - 指在文件开始时忽略的行数。
  •  delims=xxx - 指定分隔符集。默认以空格和制表符TAB为分隔符。for /f "delims= " %i in (c:/temp/myfile.txt) do echo %i 与for /f %i in (c:/temp/myfile.txt) do echo %i 效果一样。
  •  tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。(既最后一个为*时,剩下的字符数据都存入*对应的变量中)
  •  usebackq - 指定新语法已在下类情况中使用:在作为命令执行一个后引号的字符串并且一个单 引号字符为文字字符串命令并允许在 file-set中使用双引号扩起文件名称。

“usebackq”反转意思,把("c:/temp/myfile.txt")当成文件,面把('command')当成字符串。作用:是避免文件名中有空格时处理错误。四个例子如下:

  • for /f "usebackq eol=; tokens=*" %i in ("c:/temp/myfile.txt") do @echo "%i" 结果:

b1,b2,b3,b4,b5

c1 c2 c3 c4 c5

d1,d2,d3,d4,d5

  • for /f "eol=; tokens=*" %i in ("c:/temp/myfile.txt") do @echo "%i" 结果:"c:/temp/myfile.txt"
  • for /f "tokens=*" %i in ('echo 中微中') do @echo "%i" 结果:"中微中",单引号中的内容当命令行
  • for /f "usebackq tokens=*" %i in ('echo 中微中') do @echo "%i" 结果:"echo 中微中",单引号中的内容当字符串

分析以下FOR循环:

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

  •  会分析 myfile.txt 中的每一行,忽略以分号“;”打头的那些行,既第一行“;a1,a2,a3,a4,a5”被忽略。
  • 分隔符:“,”
  • 将每行中的第二个和第三个符号传递给 for 函数体,既%i=b2,%j=b3,%k=b4,b5 。token=2,3*与token=2-3*与token=2-3,*一样效果。
  • 请注意,此 for 函数体的语句引用 %i 来获得第二个符号,引用 %j 来获得第三个符号,引用 %k来获得第三个符号后的所有剩余符号。
  • 对于带有空格的文件名,你需要用双引号将文件名括起来。为了用这种方式来使用双引号,还需要使用 usebackq 选项,否则,双引号会被理解成是用作定义某个要分析的字符串的。
  •  %i 在 for 语句中显式声明,%j 和 %k 是通过tokens= 选项隐式声明的。可以通过 tokens= 一行指定最多 26 个符号,只要不试图声明一个高于字母 "z" 或"Z" 的变量。请记住,FOR 变量是单一字母、分大小写和全局的变量;而且,不能同时使用超过 52 个。

还可以在相邻字符串上使用 FOR /F 分析逻辑,方法是,用单引号将括号之间的 file-set 括起来。这样,该字符串会被当作一个文件中的一个单一输入行进行解析。

最后,可以用 FOR /F 命令来分析命令的输出。方法是,将括号之间的 file-set 变成一个反括字符串。该字符串会被当作命令行,传递到一个子 CMD.EXE,其输出会被捕获到内存中,并被当作文件分析。如以下例子所示:

  •  FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i 与下行的效果一样,set两边是反引号(1左边的键)
  • FOR /F "delims==" %i IN ('set') DO @echo %i 这里用的是单引号

会枚举当前环境中的环境变量名称。


另外,FOR 变量参照的替换已被增强。你现在可以使用下列选项语法(此处的"I"是in前面的变量的替换,如 for %a in() do时,I就是a):

  •  %~I - 删除任何引号("),扩展 %I
  •  %~fI - 将 %I 扩展到一个完全合格的路径名
  •  %~dI - 仅将 %I 扩展到一个驱动器号
  •  %~pI - 仅将 %I 扩展到一个路径
  •  %~nI - 仅将 %I 扩展到一个文件名(只取文件名)
  •  %~xI - 仅将 %I 扩展到一个文件扩展名(只取扩展名)
  •  %~sI - 扩展的路径只含有短名
  •  %~aI - 将 %I 扩展到文件的文件属性
  •  %~tI - 将 %I 扩展到文件的日期/时间
  •  %~zI - 将 %I 扩展到文件的大小
  •  %~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩展到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串

可以组合修饰符来得到多重结果:

  •  %~dpI - 仅将 %I 扩展到一个驱动器号和路径
  •  %~nxI - 仅将 %I 扩展到一个文件名和扩展名
  •  %~fsI - 仅将 %I 扩展到一个带有短名的完整路径名
  •  %~dp$PATH:I - 搜索列在路径环境变量的目录,并将 %I 扩展到找到的第一个驱动器号和路径。
  •  %~ftzaI - 将 %I 扩展到类似输出线路的 DIR

在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名比较易读,而且避免与不分大小写的组合键混淆。



Tags:DOS   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
详细说明及例子 :对一组文件中的每一个文件执行某个特定命令普通格式:FOR %variable IN (set) DO command [command-parameters] %variable 指定一个单一字母可替换的参数。 ...【详细内容】
2021-12-27  Tags: DOS  点击:(0)  评论:(0)  加入收藏
前言传统的 DDOS 防御通常使用“硬抗”的方式,导致开销很大,而且有时效果并不好。例如使用 DNS 切换故障 IP 的方案,由于域名会受到缓存等因素的影响通常有分钟级延时,前端难以...【详细内容】
2021-12-21  Tags: DOS  点击:(19)  评论:(0)  加入收藏
#本文仅用于网络安全研究学习任何未经授权的入侵都是违法行为dir 浏览 创建文件 echo 文件内容 > 文件名字.扩展名 浏览文件内容 type 文件名 分页浏...【详细内容】
2021-12-07  Tags: DOS  点击:(22)  评论:(0)  加入收藏
以往每年 iPhone 都是苹果秋季发布会上最受关注的产品,今年似乎有些例外,抢先出场的 iPad mini 第六代(以下简称 iPad mini 6)风头正盛,人们对它的关注隐隐有超越 iPhone 13 的趋...【详细内容】
2021-09-23  Tags: DOS  点击:(61)  评论:(0)  加入收藏
DDOS简介DDOS又称为分布式拒绝服务,全称是Distributed Denial of Service。DDOS本是利用合理的请求造成资源过载,导致服务不可用,从而造成服务器拒绝正常流量服务。就如酒店里...【详细内容】
2021-08-20  Tags: DOS  点击:(69)  评论:(0)  加入收藏
IT之家 8 月 12 日消 苹果今日发布了一款新的开发者工具,旨在强制那些运行 iOS 15 和 iPadOS 15 的设备在使用不安全的 WiFi 网络或 WiFi 速度较慢时优先使用 5G 连接而不是...【详细内容】
2021-08-12  Tags: DOS  点击:(151)  评论:(0)  加入收藏
工具https://github.com/poornigga/tfn2k.githttps://github.com/cxueqin/falcon.git //tfn2k web版本https://github.com/GinjaChris/pentmenu.githttps://github.com/Of...【详细内容】
2021-08-04  Tags: DOS  点击:(69)  评论:(0)  加入收藏
相信最近有很多小伙伴对于Windows 11新系统的更新有所耳闻,也有很多小伙伴已经收到Windows的正版推送,也已经体验到了Windows 11的魅力。那么,你是否还在质疑:为什么我没有收到W...【详细内容】
2021-07-16  Tags: DOS  点击:(5967)  评论:(0)  加入收藏
它看起来像复古计算,但它是一个现代的操作系统,你可以用它来完成任务。在整个 1980 年代和 1990 年代,我主要是一个 DOS 用户。我喜欢 DOS 提供的命令行环境,它随着每一个连续的...【详细内容】
2021-06-17  Tags: DOS  点击:(170)  评论:(0)  加入收藏
摘要: 发送大量的数据包消耗目标主机资源,使其无法正常工作。1.前言:DOS攻击原理:发送大量的数据包消耗目标主机资源,使其无法正常工作。DNS放大攻击的原理:伪造DNS数据包,向DNS服...【详细内容】
2021-04-15  Tags: DOS  点击:(219)  评论:(0)  加入收藏
▌简易百科推荐
详细说明及例子 :对一组文件中的每一个文件执行某个特定命令普通格式:FOR %variable IN (set) DO command [command-parameters] %variable 指定一个单一字母可替换的参数。 ...【详细内容】
2021-12-27  中微中科技    Tags:DOS   点击:(0)  评论:(0)  加入收藏
Windows11都出来了,XP和Windows7真的被淘汰了吗,很显然并不会,系统有很多分类就不一一介绍了,以Windows系列系统举例,最初XP系统也是分代的,后来WIN7出现在了大众的视线,因为普遍的...【详细内容】
2021-12-09  WHW与某人    Tags:Windows7   点击:(19)  评论:(0)  加入收藏
Unix与Linux均是是多用户、多任务的操作系统,也有多种版本。Unix诞生于20世纪70年代初,而Linux发明于20世纪90年代初;可以说Unix之于Linux属于承上启下的关系。Unix诞生于贝尔...【详细内容】
2021-10-11  小扇子的笔记    Tags:Unix   点击:(85)  评论:(0)  加入收藏
很多朋友经常问我这个问题,总是主观地认为64位操作系统就是要比32位的操作系统高端,高级、快等等的,现用我个人的观点和大家科普一下两者的区别。1、对于电脑硬件配置的要求不...【详细内容】
2021-09-07  一个人6639    Tags:操作系统   点击:(82)  评论:(0)  加入收藏
它看起来像复古计算,但它是一个现代的操作系统,你可以用它来完成任务。在整个 1980 年代和 1990 年代,我主要是一个 DOS 用户。我喜欢 DOS 提供的命令行环境,它随着每一个连续的...【详细内容】
2021-06-17  Jim Hall  Linux中国  Tags:FreeDOS   点击:(170)  评论:(0)  加入收藏
开源操作系统 FreeDOS是一个久经考验的项目,可帮助用户玩复古游戏、更新固件、运行过时但受欢迎的应用以及研究操作系统设计。FreeDOS 提供了有关个人计算历史的见解(因为它实...【详细内容】
2021-03-16      Tags:FreeDOS   点击:(252)  评论:(0)  加入收藏
现代计算机之父冯诺伊曼最先提出程序存储的思想,并成功将其运用在计算机的设计之中,该思想约定了用二进制进行计算和存储,还定义计算机基本结构为 5 个部分,分别是中央处理器(CPU)、内存、输入设备、输出设备、总线。...【详细内容】
2021-03-04      Tags:操作系统   点击:(212)  评论:(0)  加入收藏
初学操作系统的时候,我就一直懵逼,为啥进程同步与互斥机制里有信号量机制,进程通信里又有信号量机制,然后你再看网络上的各种面试题汇总或者博客,你会发现很多都是千篇一律的进程...【详细内容】
2021-03-01      Tags:通信机制   点击:(184)  评论:(0)  加入收藏
Unix很美。 请允许我为您画一些快乐的小树。 我不会解释很多命令,这很无聊,网络上已经有上百万的教程可以做到这一点。我将让您能够对系统进行推理。您想做的每件奇特的事都...【详细内容】
2021-02-26      Tags:Unix   点击:(209)  评论:(0)  加入收藏
微软倾力打造的Windows 10X系统已经完全泄露,但镜像仅支持Surface Pro 7。不过,大神Albacore(thebookisclosed)制作了非官方的镜像打包工具(Mega网盘),可以提取本地驱动和配置文...【详细内容】
2021-02-03      Tags:Win10X   点击:(189)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条