|
|
楼主 |
发表于 2023-10-5 23:06:45
|
显示全部楼层
本帖最后由 LTSC1809 于 2023-11-25 21:31 编辑
第4章:For语句
for语句严格来讲也是流程控制语句的一部分,但是看到我单独拉出来讲,想必一定认识到了它的重要性。
For语句在CMD中有着许多的作用,并且有许多扩展语法。这可能不是很容易学会。
首先看最基础的For语句。For语句的作用事遍历输入的每个元素,并执行某些命令。你可能没懂,没关系,看个例子就知道了。- for %%i in (a,b,c) do echo %%i
复制代码 运行后会输出:解释亿下:
%%i事形式变量,事一种在for语句中专用的变量(批处理文件中使用双百分号跟名称的方式表示,名称只能一个字母,而一般变量可以多个字母。如果在cmd窗口中直接输入命令执行 那么只需使用单百分号)。它代表了当前遍历到的元素。
in后面跟的括号里面写的内容默认使用逗号分隔,它们就是刚刚所说的输入的元素。
有多少个元素,do后面的语句就会执行几次。
执行时,例如有三个元素,那么%%i这个形式变量的内容第一次运行时内容为第一个元素,第二次运行时内容为第二个元素,第三次运行则为第三个元素。
所以,在这个例子中,第一次执行时%%i内容事第一个元素(也就是a),第二次事第二个元素(b)... echo出的内容也就是第一次为a 第二次为b...
如果你需要在do中执行多行指令,那么你可以使用前面提到的小括号。
而这只是for的基础用法 它还有以下常用的开关:
/f
/l
for /f:主要用于文本处理 并可以读取文件。语法:
for /f %%i in (文件路径) do echo %%i
这个语句传入的文件名(文本文件)也就相当于普通for的传入对象。文本中的每一行都是一个单独的对象,所以这行代码会逐句输出整个文本。而它也是有分隔符的,为了防止文件中出现逗号而导致读取异常,可以使用delims这个配置。这一类的配置这样使用:
注意,for中 in后面跟随的括号 里面输入用双引号包裹的变量或是字符串,也可以被操作。
for /f "配置名称" %%i in.....
而delims这个配置,可以设置分隔符。使用"delims=分隔符"来设置。如果你输入"delims=",不输入分隔符,那么也就是不使用分隔符,也就不会因为文本中出现逗号导致读取异常了(注意,仍然有一些特殊符号如!可能读取不到,这很难解决。如果只需要显示整个文件,建议使用type 文件路径)
for /f的所有配置:
usebackq:加上这条配置,则括号里可以输入双引号来包裹路径。(这涉及到批处理中一个问题,路径如果包含空格那么会被从空格的地方截断。这会导致无法正确使用路径。所以批处理中包含空格的路径可以使用双引号包裹 来让它被正常识别。但是for /f中一般情况下路径不能加双引号,所以使用这个配置来解决路径包含空格的问题。)
tokens:决定读取第几段内容,"tokens=段数(数字)"。也就是分隔符作用下被分开的多个对象,具体是第几个。for /f中 这可以被用作读取文本的其中一行之中又有分隔符,来指定读取这一行的第几段。
skip:忽略文本开头的一些行数。"skip=行数(数字)",如果使用了这个配置,那么文本的第一行至输入行数会被忽略,从下一行开始读取。
eol:指定一个字符/一个字符串,遇到这个字符/字符串开头的某一行就忽略掉这一行。"eol=字符"
如果一个for语句使用多个配置 那么在一对双引号里写上所有的配置。每个不同的配置之间用空格分隔。如 for /f "usebackq eol=' delims=" %%i in ("aaa.txt") do echo %%i
再来讲讲/l开关。它用于循环执行指定的次数。
for /l %%i in (起始数字,步长,终止数字) do 执行命令
从起始数字开始 每执行一次 计数器都加步长,直到计数器数字等于终止数字。如:for /l %%i in (50,2,100) do echo %%i
意为从五十开始计数,每次运行 加二,直到数字等于100,每次执行都输出当前计数器的数字。请注意如果步长设置的不能正好加到终止数字的大小,那么当计数器大于终止数字的时候会结束循环。如果步长设置为负数如-1,每运行一次计数器加上负一,也就是减一。可以使计数器递减 直到其小于等于终止数字。
这篇写的挺长的。for的用法还有许多没有讲到,但是基本都不常用。这章内容难度急剧上升,看不懂可以多看几遍 百度 或者发帖提问(注意不要水帖,会严重影响别人阅读)。可能有的大佬已经想说我有重要的一点没说了 别着急质问,会有单独的一章讲这个。
请记住一定要自己去实际建立一个bat文件尝试一下。光看是永远学不会的。 |
|