目录结构:

contents structure [+]

一.简介

在DOS窗口中,输入for /?查看官方给出的for命令的用法。

FOR %variable IN (set) DO command [command-parameters]
%variable 指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。可以使用通配符(* 和 ?)。
command 指定对每个文件执行的命令。
command-parameters 为特定命令指定参数或命令行开关。 现在开始讲每个参数的意思

我们知道了一个for命令的基本格式为:FOR 参数 %变量名 IN (相关文件或命令) DO 执行的命令。这里需要注意在DOS窗口中和在批处理文件中,for命令的格式有一定的差别,在DOS窗口中,变量以单百分号加字母表示,但若是在批处理文件中,变量以双百分号加字母表示,批处理文件中,for命令的基本格式为:FOR 参数 %%变量名 IN (相关文件或命令) DO 执行的命令。
参数有四种,分别为/d、/r、/L、/f,每一种参数对应的for命令的具体格式也有所不同。接下来以此讲解每一种参数的使用:
接下来的所有案例,若不是特别说明,都是以批处理文件的方式。

二.for /d ... in ...

/d表示目录搜索,它主要用于搜索目录,不会搜索文件。
for命令的格式为:FOR /D %%variable IN (set) DO command
如果set包含通配符,将对set想匹配的每个目录执行Command,%%variable代表了每一个目录。

2.1 案例

案例:打印C://根目录下所有的文件夹名称

@echo off
rem 进入到c盘根目录
c:
rem 打印当前目录下的所有文件夹名称
for /d %%i in (*) do @echo %%i
pause

案例:打印当前路径下,只有1-3个字母的文件夹名称

@echo off
for /d %%i in (???) do @echo %%i
pause

案例:显示所有以window开始的文件夹名称

@echo off
rem 进入到C盘
c:
rem 显示所有以window开始的文件夹名称
for /d %%i in (window?) do @echo %%i
pause

三.for /r ... in ...

/r表示递归,以递归的方式对当前目录下的每个目录执行操作。
for命令的格式为:FOR /R [[drive:]path] %%variable IN (set) DO command
中括号[]表示可有可无,如果不指定开始递归的根目录,则以当前目录作为递归的根目录。
这里需要注意,若set为点(.),则只枚举目录树。

3.1 案例

案例:显示C盘中所有以.exe结尾的文件名

@echo off
for /r c: %%i in (*.exe) do @echo %%i
pause

案例:显示当前目录及子目录下的所有以.exe结尾的文件名

@echo off
for /r %%i in (*.exe) do @echo %%i
pause

案例:显示当前目录及子目录的所有目录名

@echo off
for /r %%i in (.) do @echo %%i
pause

现在清楚了/d 和 /r 参数的同异点了,他们都和目录有关,但/d只会检索当前目录下的所有目录,但/r可以以递归的方式检索所有目录。

四.for /L ... in ...

/L可以写成小写字母的/l,为了和数字1区分,下面还是用大写的字母L。
/L表示迭代变量,在给定的起点、步长、终点迭代数据。
for命令的格式:for /L %%Variable in (Start#,Step#,End#) do Command
使用迭代变量设置起始值 (Start#),然后逐步执行一组范围的值,直到该值超过所设置的终止值 (End#)。/L 将通过对 Start# 与 End# 进行比较来执行迭代变量。如果 Start# 小于 End#,就会执行该命令。

4.1案例

案例:打印1到5

@echo off
for /L %%i in (1,1,5) do @echo %%i
pause

案例:增加5个CMD窗口

@echo off
for /L %%i in (1,1,5) do start cmd
pause

会发现,新增加了5个CMD窗口,若是(1,1,65535)呢,就会多开启65535个CMD窗口。如果把上面的start cmd换成 md %%i,那么就可以多建立5个文件夹。

五.for /f ... in ...

含有/f的for命令使用最多,
for命令的格式:

FOR /F ["options"] %%i IN (file) DO command
FOR /F ["options"] %%i IN ("string") DO command
FOR /F ["options"] %%i IN (command) DO command file代表一个或多个文件
string 代表字符串
command代表命令
["options"] 可选

对于for命令的三个格式都大通小异,IN(file),IN("string"),IN(command)分别表示从文件、字符串、命令中读取数据。

file为文件名,按照官方的说法是,for会依次将file中的文件打开,并且在进行到下一个文件之前将每个文件读取到内存,按照每一行分成一个一个的元素,忽略空白的行,看个例子。

假如文件a.txt中有如下内容:
第1行第1列 第1行第2列 第1行第3列
第2行第1列 第2行第2列 第2行第3列
第3行第1列 第3行第2列 第3行第3列

可以使用type命令来显示:

@echo off
type a.txt
pause

显示如下:

第1行第1列 第1行第2列 第1行第3列
第2行第1列 第2行第2列 第2行第3列
第3行第1列 第3行第2列 第3行第3列

使用for命令同样也可以完成这个功能:

@echo off
for /f "delims=\n" %%i in (a.txt) do echo %%i
pause

其中delims=\n表示以换行符分割。

5.1 常用关键字

5.1.1 delims关键字

delims关键字表示分隔符,需要注意若不指定delims那么,默认以空格和Tab键分割。如果按照下面的格式使用空格来显示的话:

@echo off
for /f %%i in ("asas daa") do @echo %%i
pause

上面的语句会显示asas。

@echo off
for /f "delims= " %%i in (a.txt) do echo %%i
pause

显示:

第1行第1列
第2行第1列
第3行第1列

可以看出值显示了第一列的值

5.1.2 tokens关键字

tokens命令可以指定显示哪一列的数据,该命令还支持通配符(*)

@echo off
for /f "tokens=2,3 delims= " %%i in (a.txt) do @echo %%i %%j
pause

效果:

第1行第2列 第1行第3列
第2行第2列 第2行第3列
第3行第2列 第3行第3列

在上面的命令中多了%%j,这是for命令自动添加上的,通过"tokens=2,3 delims= "表示以空格为分割符号,取没行的第2和第3列数据。并且把第列的数据赋值给%%i,把第三列的数据赋值给%%j。如果要把第二列和第三列显示到同一列,那么可以把tokens=2,3换为tokens=2-3。

对于通配符就是把这一行或是剩下的全部元素作为一列数据

@echo off
for /f "tokens=1,*" %%i in (a.txt) do @echo %%i %%j
pause

显示:

第1行第1列 第1行第2列 第1行第3列
第2行第1列 第2行第2列 第2行第3列
第3行第1列 第3行第2列 第3行第3列

5.1.3 skip和eol关键字

skip就是要忽略文件的前多少行,而eol用来指定当一行以什么符号开始时,就忽略它。

@echo off
for /f "skip=2 tokens=*" %%i in (a.txt) do @echo %%i
pause

5.2 显示当前目下的下的所有文件名

@echo off
rem 启用延迟变量
setlocal enabledelayedexpansion
set /a v=1
for /f "delims=." %%i in ('dir /b/a-d/oN *.*') do (
set /a v+=1
set temp=%%i
@echo 第!v!个文件名:!temp!
)
pause

【Windows】Windows中解析DOS的for命令使用的更多相关文章

  1. 【Windows】Windows中解析DOS的DIR命令使用

    总结一下cmd中的dir命令的用法 64位win10系统上,打印帮助文档. D:\test>dir /? 显示目录中的文件和子目录列表. DIR [drive:][path][filename] ...

  2. 关于在phpStudy环境下,windows cmd中 php不是内部命令问题

    首先查看system32是否加入系统变量 其次要把当前运行的php版本的路径加入到系统变量中去,path中, 一定要是这个样子的: D:\phpStudy\php\php-5.6.27-nts 不然没 ...

  3. Windows常用的一些DOS命令整理

    Windows常用的一些DOS命令整理.. MS DOS 命令大全 ---清空Dos屏幕使用命令:cls -- Dos切换当前目录到D盘:cd d: 一.基础命令 1 dir 无参数:查看当前所在目录 ...

  4. Windows常用的一些DOS下的CMD命令整理

    Windows常用的一些DOS下的CMD命令整理... -------------- 正斜杠--/////-----向右倒--网址正斜杠反斜杠--\\\\------向左倒--文件路径反斜杠 DOS命 ...

  5. windows系统下在dos命令行kill掉被占用的pid (转)

    原文出自:http://www.2cto.com/os/201304/203771.html   windows系统下在dos命令行kill掉被占用的pid   1.开始-->运行-->c ...

  6. 在windows中,如何使用cmd命令行窗口正确显示编码为utf-8格式的文字

    在windows中,如何使用cmd命令行窗口正确显示编码为utf-8格式的文字呢? 正确的步骤如下: 1, 打开cmd命令行窗口 2, 输入命令 >chcp 65001 数字65001代表的是c ...

  7. windows 中的类似于sudo的命令(在cmd中以另一个用户的身份运行命令)

    linux中我们习惯用sudo命令来临时用另一个用户的身份执行命令. windows中,通常我们需要用管理员权限执行命令的时候通常是 右键->run as administrator. 用着键盘 ...

  8. Cmder命令行工具在Windows系统中的配置

    一.Cmder简介 Cmder:一款用于Windows系统中,可增强传统cmd命令行工具的控制台模拟器(类似于Linux系统中的终端控制窗口) 特点: 无需安装,解压即用 可使用较多Linux命令,如 ...

  9. Windows Phone8 中如何引用 SQLite 数据库

    SQLite数据库介绍 1.SQLite是一款轻型的嵌入式数据库,使用C++开发,使用非常广泛 2.SQLite是一款跨平台的数据库,支持Windows.Linux.Android.IOS.Windo ...

随机推荐

  1. 表达式树ExpressionTrees

    简介 表达式树以树形数据结构表示代码,其中每一个节点都是一种表达式,比如方法调用和 x < y 这样的二元运算等.你可以对表达式树中的代码进行编辑和运算.这样能够动态修改可执行代码.在不同数据库 ...

  2. 一次流式处理的submit

    考虑很多: 压背.限流.JVM优化,出错的重试等 #!/bin/bash num_executors=1 executor_memory=1g driver_memory=1g executor_co ...

  3. Lineage逻辑回归分类算法

    Lineage逻辑回归分类算法 线性回归和逻辑回归参考文章: http://blog.csdn.net/viewcode/article/details/8794401 http://www.cnbl ...

  4. 计蒜客 淘宝的推荐系统【DP】

    题目链接:https://nanti.jisuanke.com/t/26984                                                             ...

  5. Web侦察工具HTTrack (爬取整站)

    Web侦察工具HTTrack (爬取整站) HTTrack介绍 爬取整站的网页,用于离线浏览,减少与目标系统交互,HTTrack是一个免费的(GPL,自由软件)和易于使用的离线浏览器工具.它允许您从I ...

  6. P2399 non hates math

    P2399 non hates math将分数化成小数的模拟题,把循环减掉就可以了.1.1(234)*10^4==11234.234*10^1==11.2349999*(1.1(234))==1122 ...

  7. 一道有意思的多线程面试题 C# 代码实现

    如果你对多线程的控制不怎么了解,那么理解了这篇文章的内容也许对你有帮助.鼓励先自己动手实现一遍,做不出来在看代码. 题目一:两个线程交替打印0~100的奇偶数 这道题就是说有两个线程,一个名为偶数线程 ...

  8. 用js来实现那些数据结构02(数组篇02-数组方法)

    上一篇文章简单的介绍了一下js的类型,以及数组的增删方法.这一篇文章,我们一起来看看数组还有哪些用法,以及在实际工作中我们可以用这些方法来做些什么.由于其中有部分内容并不常用,所以我尽量缩小篇幅.在这 ...

  9. luoguP3302 [SDOI2013]森林 主席树 启发式合并

    题目链接 luoguP3302 [SDOI2013]森林 题解 本来这题树上主席树暴力启发式合并就完了 结果把lca写错了... 以后再也不这么写了 复杂度\(O(nlog^2n)\) "f ...

  10. HDU.5628.Clarke and math(狄利克雷卷积 快速幂)

    \(Description\) \[g(i)=\sum_{i_1|i}\sum_{i_2|i_1}\sum_{i_3|i_2}\cdots\sum_{i_k|i_{k-1}}f(i_k)\ mod\ ...