bat中的“for”的用法。~

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bat中的“for”的用法。~相关的知识,希望对你有一定的参考价值。

老弟是一个刚学bat不久的菜鸟,一见到“for”的命令就头晕,可以请教一下各位高手,bat命令中,for的基本用法么。?最好不要是网上大篇大篇copy的,能是越看得懂的越好。

by the way. 问一下“%”在bat命令中是什么意思。?

回答好的我一定会加分。~

学批处理当然要学到for了

看看他的基本格式
FOR 参数 %%变量名 IN (相关文件或命令) DO 执行的命令

参数:FOR有4个参数 /d /l /r /f 比较常用的是/f参数
%%变量名 :这个变量名可以是小写a-z或者大写A-Z,他们区分大小写哦~

IN:命令的格式,照写就是了!
(相关文件或命令) :FOR要把什么东西读取然后赋值给变量,不懂的话看下面的例子
do:命令的格式,照写就是了!
当然我们可以不加任何参数执行FOR,这个时候他可以加通配符号进行操作,看我的例子.
例子:
@echo off
for %%i in (c:\windows\*.txt) do echo %%i
pause

这个会打印c:\windows\目录下的全部TXT文件的文件名字.
参考技术A cmd下:[在bat中,以下每个%都必须写成两个]

rem 输出两行,分别为两个单词Hello和World
for %a in (Hello,World) do echo %a

rem 输出1到10
for /l %a in (1,1,10) do echo %a

rem 列举d盘所有txt文件
for /r d: %a in (*.txt) do echo %a

rem 显示系统版本
for /f "tokens=3" %a in ('ver') do echo %a

rem 列举当前目录下的子目录
for /d %a in (*) do echo %a
参考技术B 真不明白你为什么要这么写
既然123.TXT里只有一个数字且一定是1-9中的一个,你只要把它读取出来赋给一个变量
然后用这个变量去复制文件就可以啦
参考技术C   FOR命令就是把读取的东西,然后赋值给变量。
  FOR有4个参数/d、 /l 、 /r 、 /f
  每个参数的意思分别如下:
  /d:仅为目录
  如果Set (也就是我上面写的"相关文件或命令")包含通配符(*和?),将对与Set相匹配的每个目录(而不是指定目录中的文件组)执行指定的Command。
  /R:递归
  进入根目录树[Drive:]Path,在树的每个目录中执行for语句。如果在/R后没有指定目录,则认为是当前目录。如果Set只是一个句点(.),则只枚举目录树。
  /L:迭代数值范围
  使用迭代变量设置起始值(Start#),然后逐步执行一组范围的值,直到该值超过所设置的终止值(End#)。/L将通过对Start#与End#进行比较来执行迭代变量。
  /f:迭代及文件解析
  使用文件解析来处理命令输出、字符串及文件内容。使用迭代变量定义要检查的内容或字符串,并使用各种ParsingKeywords选项进一步修改解析方式。

Windows bat脚本——for循环用法详解

Windows bat脚本的for语句基本形态如下:

在cmd窗口中:for %I in (command1) do command2
在批处理文件中:for %%I in (command1) do command2
之所以要区分cmd窗口和批处理文件两种环境,是因为在这两种环境下,命令语句表现出来的行为虽然基本一样,但是在细节上还是稍有不同,最明显的一个差异就是:在cmd窗口中,for之后的形式变量I必须使用单百分号引用,即%I;而在批处理文件中,引用形式变量I必须使用双百分号,即%%I。为了方便起见,若不是特别强调,以下的讲解都以批处理文件环境为例。
我们先来看一下for语句的基本要素都有些什么:

for、in和do是for语句的关键字,它们三个缺一不可;
%%I是for语句中对形式变量的引用,即使变量l在do后的语句中没有参与语句的执行,也是必须出现的;
in之后,do之前的括号不能省略;
command1表示字符串或变量,command2表示字符串、变量或命令语句;
  下面来看一个Windows bat脚本的demo(记为demo1):

@echo off
for %%I in (ABC) do echo %%I
pause
  保存为.bat文件(批处理文件)并执行,将会在弹出的批处理窗口中看到这样的信息:

 

  对批处理文件的for循环就是这样简单,下面来看看for语句的注意事项,并运行更复杂的for循环实例。


for语句的形式变量I,可以换成26个字母中的任意一个,这些字母会区分大小写,也就是说,%%I和%%i会被认为不是同一个变量;形式变量I还可以换成其他的字符,但是,为了不与批处理中的%0~%9这10个形式变量发生冲突,请不要随意把%%I替换为%%0~%%9中的任意一个;
in和do之间的command1表示的字符串或变量可以是一个,也可以是多个,每一个字符串或变量,我们称之为一个元素,每个元素之间,用空格键、跳格键、逗号、分号或等号分隔;
for语句依次提取command1中的每一个元素,把它的值赋予形式变量I,带到do后的command2中参与命令的执行;并且每次只提取一个元素,然后执行一次do后的命令语句,而无论这个元素是否被带到command2中参与了command2的运行;当执行完一次do后的语句之后,再提取command1中的下一个元素,再执行一次command2,如此循环,直到command1中的所有元素都已经被提取完毕,该for语句才宣告执行结束。

有了以上的基础,我们再来看下面这个例子,这个例子修改了demo1中的部分内容(记为demo2),结果将大不一样:


@echo off
for %%I in (A,B,C) do echo %%I
pause
  运行结果如下:

 

如果把 bbs.bathome.cn 这个字符串中的点号换为空格、跳格或等号,执行结果将和demo2的执行结果别无二致。

现在,来分析一下demo2代码中for语句的执行过程:

  1.for语句以逗号为分隔符,把 A,B,C 这个字符串切分成三个元素:A、B和C,由此决定了do后的语句将会被执行3次; 

  2.第一次执行过程是这样的:先把 bbs 这个字符串作为形式变量I的值,带入do后的语句中加以执行,也就是执行 echo %%I 语句,此时的I值为A,因此,第一次执行的结果,将会在屏幕上显示A这个字符串;第二次执行和第一次执行的过程是一样的,只不过此时I的值已经被替换为command1中的第二个元素了,也就是 B 这个字符串;如此循环,当第三次echo执行完毕之后,整条for语句才算执行完毕,此时,将执行下一条语句,也就是pause命令。

 高级用法:

1)搜索当前目录下有哪些文件?

@echo off
for %%i in (*.*) do echo "%%i"
pause
2)搜索当前目录下所有的文本文件?

@echo off
for %%i in (*.txt) do echo "%%i"
pause
————————————————
版权声明:本文为CSDN博主「追梦菜鸟」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013514928/article/details/79629937

以上是关于bat中的“for”的用法。~的主要内容,如果未能解决你的问题,请参考以下文章

Windows bat脚本——for循环用法详解

Jenkins 作业因命令中的 for 循环而失败

bat脚本中For /f 中的Delims和Tokens总结

bat for循环语法错误

Windows Bat 之For 循环

bat初学