成一个整体,视为一条命令行。 括号在for语句和if语句中常见,用来嵌套使用循环或条件语句,其实括号()也可以单独使用,请看例子。 例: 命令:echo 1 echo 2 & echo 3 可以写成: ( echo 1 echo 2 echo 3 ) 上面两种写法效果一样,这两种写法都被视为是一条命令行。 注意:这种多条命令被视为一条命令行时,如果其中有变量,就涉及到变量延迟的问题。 15、! 感叹号 没啥说的,在变量延迟问题中,用来表示变量,即%var%应该表示为!var!,请看前面的setlocal命令介绍。
第二章 DOS循环:for命令详解 讲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。 这个参数主要用于目录搜索,不会搜索文件,看这样的例子 @echo off for /d %%i in (c:\\*) do echo %%i pause 运行会把C盘根目录下的全部目录名字打印出来,而文件名字一个也不显示! 在来一个,比如我们要把当前路径下文件夹的名字只有1-3个字母的打出来 @echo off for /d %%i in (???) do echo %%i pause 这样的话如果你当前目录下有目录名字只有1-3个字母的,就会显示出来,没有就不显示了 这里解释下*号和?号的作用,*号表示任意N个字符,而?号只表示任意一个字符 知道作用了,给大家个思考题目! @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点: 1、set中的文件名如果含有通配符(?或*),则列举/R参数指定的目录及其下面的所用子目录中与set相符合的所有文件,无相符文件的目录则不列举。 2、相反,如果set中为具体文件名,不含通配符,则枚举该目录树(即列举该目录及其下面的所有子目录),而不管set中的指定文件是否存在。这与前面所说的单点(.)枚举目录树是一个道理,单点代表当前目录,也可视为一个文件。 例: @echo off for /r c:\\ %%i in (*.exe) do echo %%i pause 咱们把这个BAT保存到D盘随便哪里然后执行,我会就会看到,他把C盘根目录,和每个目录的子目录下面全部的EXE文件都列出来了!!!! 例: @echo off for /r %%i in (*.exe) do @echo %%i pause 参数不一样了吧!这个命令前面没加那个C:\\也就是搜索路径,这样他就会以当前目录为搜索路径,比如你这个BAT你把他放在d:\\test目录下 |