Dos之For循环精讲

来源:互联网 发布:suse linux设置网络 编辑:程序博客网 时间:2024/06/05 14:51

------无参数------

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

for %%i in (t*.*) do echo %%i --显示当前目录下与t*.*相匹配的文件(只显示文件名,不显示路径) 

------/R参数------

格式:FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
  此命令会搜索指定路径及所有子目录中与set相符合的所有文件,注意是指定路径及所有子目录。  

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

    2、如果set中为具体文件名,不含通配符,则枚举该目录树(即列举该目录及其下面的所有子目录)(并在后面加上具体的文件名),而不管set中的指定文件是否存在。

instance

for /r c:\ %%i in (*.exe) do echo %%i --把C盘根目录,和每个目录的子目录下面全部的EXE文件都列出来了
------/L参数 ------

格式:FOR /L %variable IN (start,step,end) DO command [command-parameters]

  该集表示以增量形式从开始到结束的一个数字序列。可以使用负的 Step

    for /l %%i in (1,1,5) do @echo %%i --输出1 2 3 4 5  for /l %%i in (1,2,10) do @echo %%i --输出1,3,5,7,9   for /l %%i in (100,-20,1) do @echo %%i --输出100,80,60,40,20  for /l %%i in (1,1,5) do start cmd --打开5个CMD窗口

------/F参数 ------

格式:  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]或者使用usebackq    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]
      file为文件名,按照官方的说法是,for会依次将file中的文件打开,并且在进行到下一个文件之前将每个文件读取到内存,按照每一行分成一个一个的元素,忽略空白的行

下面是高手解释:

      迭代及文件解析--使用文件解析来处理命令输出、字符串及文件内容。使用迭代变量定义要检查的内容或字符串,并使用各种options选项进一步修改解析方式。使用options令牌选项指定哪些令牌应该作为迭代变量传递。
  请注意:在没有使用令牌选项时,/F 将只检查第一个令牌。文件解析过程包括读取输出、字符串或文件内容,将其分成独立的文本行以及再将每行解析成零个或更多个令牌。然后通过设置为令牌的迭代变量值,调用 for 循环。
  默认情况下,/F 传递每个文件每一行的第一个空白分隔符号。跳过空行。

---options的含义---

Tokens
含义就是,提取指定的列,注意列与句的联系与区别。
文本内容由许多文字字符串组成,它们被标点符号分隔,两个标点符号之间的语句我们称为“句子”。
当标点符号被“tokens=”指定为分隔符之后,文字将被分成多个部分。对应的每行的每个部分我们称之为“列”。
一列可能是一个句子,也可能包含多个句子,视delims定义的标点符号而定。

Delims的语法:
for /f "delims=符号集"  %%i

一句话总结:忽略分隔符,切分字符串。


EOL=c:指一个行注释字符的结尾(就一个)。例如:eol=; --忽略以分号打头的那些行;


Skip就是要忽略文件的前多少行。例如:skip:2 忽略文件前两行


     还是先从括号执行,因为含有参数/f,所以for会先打开a.txt,然后读出a.txt里面的所有内容,把它作为一个集合,并且以每一行作为一个元素,所以会产生这样的集合,而空格在dos里面是会被转意为另一行

 

{“第1行第1列 第1行第2列 第1行第3列”, //第一个元素

“第2行第1列 第2行第2列 第2行第3列”, //第二个元素

“第3行第1列 第3行第2列 第3行第3列”}   //第三个元素


实例进阶,点击进入


------扩展状态------

echo ---显示"dir c:\boot.ini /b "    for /f "delims=" %%i IN (temp.txt) DO echo   %%~i    temp中前置有引号的都删除了  for /f "delims==" %%i in ('dir c:\boot.ini /b') do echo 不扩展变量 %%i  for /f "delims==" %%i in ('dir c:\boot.ini /b') do echo 扩展变量到~fI %%~fi --扩充到一个完全合格的路径名  for /f "delims==" %%i in ('dir c:\boot.ini /b') do echo 扩展变量到~dI %%~di --仅将变量扩充到一个驱动器号  for /f "delims==" %%i in ('dir c:\boot.ini /b') do echo 扩展变量到~pI %%~pi --仅将变量扩充到一个路径  for /f "delims==" %%i in ('dir c:\boot.ini /b') do echo 扩展变量到~nI %%~ni --仅将变量扩充到一个文件名  for /f "delims==" %%i in ('dir c:\boot.ini /b') do echo 扩展变量到~xI %%~xi --仅将变量扩充到一个文件扩展名  for /f "delims==" %%i in ('dir c:\boot.ini /b') do echo 扩展变量到~sI %%~si --扩充的路径只含有短名  for /f "delims==" %%i in ('dir c:\boot.ini /b') do echo 扩展变量到~aI %%~ai --将变量扩充到文件的文件属性  for /f "delims==" %%i in ('dir c:\boot.ini /b') do echo 扩展变量到~tI %%~ti --将变量扩充到文件的日期/时间  for /f "delims==" %%i in ('dir c:\boot.ini /b') do echo 扩展变量到~zI %%~zi --将变量扩充到文件的大小  for /f "delims==" %%i in ('dir c:\boot.ini /b') do echo 扩展变量到~$PATH:I %%~$PATH:i --查找列在路径环境变量的目录,并将变量扩充到找到的第一个完全合格的名称  echo ---以下显示组合修饰符来得到多重结果---:  for /f "delims==" %%i in ('dir c:\boot.ini /b') do echo 扩展变量到~dpI %%~dpi --仅将变量扩充到一个驱动器号和路径  for /f "delims==" %%i in ('dir c:\boot.ini /b') do echo 扩展变量到~nxI %%~nxi --仅将变量扩充到一个文件名和扩展名  for /f "delims==" %%i in ('dir c:\boot.ini /b') do echo 扩展变量到~fsI %%~fsI --仅将变量扩充到一个带有短名的完整路径名  for /f "delims==" %%i in ('dir c:\boot.ini /b') do echo 扩展变量到~dp$PATH:I %%~dp$PATH:i --查找列在路径环境变量的目录,并将变量扩充到找到的第一个驱动器号和路径  for /f "delims==" %%i in ('dir c:\boot.ini /b') do echo 扩展变量到~ftzaI %%~ftzai --将变量扩充到类似输出线路的DIR


0 0
原创粉丝点击