考试首页 | 考试用书 | 培训课程 | 模拟考场 | 考试论坛  
  当前位置:操作系统 > DOS > 文章内容
  

DOS批处理高级教程:DOS循环for命令详解

 [ 2017年8月25日 ] 【

  讲FOR之前呢,咋先告诉各位新手朋友,如果你有什么命令不懂,直接在CMD下面输入:

  name /? 这样的格式来看系统给出的帮助文件,比如for /? 就会把FOR命令的帮助全部显示出来!当然许多菜鸟都看不懂....所以才会有那么多批处理文章!!!!俺也照顾菜鸟,把FOR命令用我自己的方式说明下!

  正式开始:

  一、基本格式

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

  %%variable 指定一个单一字母表示可替换的参数。

  (set) 指定一个或一组文件。可以使用通配符。

  command 指定对每个文件执行的命令。

  command-parameters 为特定命令指定参数或命令行开关。

  参数:FOR有4个参数 /d /l /r /f 他们的作用我在下面用例子解释

  现在开始讲每个参数的意思

  二、参数 /d

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

  如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。

  如果 Set (也就是我上面写的 "相关文件或命令") 包含通配符(* 和 ?),将对与 Set 相匹配的每个目录(而不是指定目录中的文件组)执行指定的 Command。

  这个参数主要用于目录搜索,不会搜索文件,看这样的例子

  ?

1
2
3
@echo off
for /d %%i in (c:\*) do echo %%i
pause

  运行会把C盘根目录下的全部目录名字打印出来,而文件名字一个也不显示!

  在来一个,比如我们要把当前路径下文件夹的名字只有1-3个字母的打出来

  ?

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

  这样的话如果你当前目录下有目录名字只有1-3个字母的,就会显示出来,没有就不显示了

  这里解释下*号和?号的作用,*号表示任意N个字符,而?号只表示任意一个字符

  知道作用了,给大家个思考题目!

  ?

1
2
3
@echo off
for /d %%i in (window?) do echo %%i
pause

  保存到C盘下执行,会显示什么呢?自己看吧! 显示:windows

  /D参数只能显示当前目录下的目录名字,这个大家要注意!

  三、参数 /R

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

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

  递归

  上面我们知道,/D只能显示当前路径下的目录名字,那么现在这个/R也是和目录有关,他能干嘛呢?放心他比/D强大多了!

  他可以把当前或者你指定路径下的文件名字全部读取,注意是文件名字,有什么用看例子!

  请注意2点:

  set中的文件名如果含有通配符(?或*),则列举/R参数指定的目录及其下面的所用子目录中与set相符合的所有文件,无相符文件的目录则不列举。

  相反,如果set中为具体文件名,不含通配符,则枚举该目录树(即列举该目录及其下面的所有子目录),而不管set中的指定文件是否存在。这与前面所说的单点(.)枚举目录树是一个道理,单点代表当前目录,也可视为一个文件。

  例:

  ?

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

  咱们把这个BAT保存到D盘随便哪里然后执行,我会就会看到,他把C盘根目录,和每个目录的子目录下面全部的EXE文件都列出来了!!!!

  例:

  ?

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

  参数不一样了吧!这个命令前面没加那个C:\也就是搜索路径,这样他就会以当前目录为搜索路径,比如你这个BAT你把他放在d:\test目录下执行,那么他就会把D:\test目录和他下面的子目录的全部EXE文件列出来!!!

  例:

  ?

1
2
3
@echo off
for /r c:\ %%i in (boot.ini) do echo %%i
pause

  运行本例发现枚举了c盘所有目录,为了只列举boot.ini存在的目录,可改成下面这样:

  ?

1
2
3
@echo off
for /r c:\ %%i in (boot.ini) do if exist %%i echo %%i
pause

  用这条命令搜索文件真不错。。。。。。

  这个参数大家应该理解了吧!还是满好玩的命令!

  四、参数 /L

  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)。

  使用迭代变量设置起始值 (Start#),然后逐步执行一组范围的值,直到该值超过所设置的终止值 (End#)。/L 将通过对 Start# 与 End# 进行比较来执行迭代变量。如果 Start# 小于 End#,就会执行该命令。如果迭代变量超过 End#,则命令解释程序退出此循环。还可以使用负的 Step# 以递减数值的方式逐步执行此范围内的值。例如,(1,1,5) 生成序列 1 2 3 4 5,而 (5,-1,1) 则生成序列 (5 4 3 2 1)。语法是:

  看着这说明有点晕吧!咱们看例子就不晕了!

  ?

1
2
3
@echo off
for /l %%i in (1,1,5) do @echo %%i
pause
首页 1 2 尾页
本文纠错】【告诉好友】【打印此文】【返回顶部
将考试网添加到收藏夹 | 每次上网自动访问考试网 | 复制本页地址,传给QQ/MSN上的好友 | 申请链接 | 意见留言 TOP
关于本站  网站声明  广告服务  联系方式  站内导航  考试论坛
Copyright © 2007-2013 中华考试网(Examw.com) All Rights Reserved