Batch批处理循环分析
众所周知,批处理经常要用到循环。不管是认真的还是整人。这里大致收集了几种批处理的循环方式以及各种附加语句。
goto 循环
这种应该是最简单的语句了,如下:
1 | @echo off |
中间的command
即为要循环的语句。此时这些命令将无限循环。
可以搭配延时语句choice /t [time] /d y /n >nul
实现间隔循环,例如:
1 | @echo off |
此时将每隔5秒输出一次man!
for 循环
这个是最为强大的语句,但是相对繁琐,此处仅介绍基本用法。
由于cmd窗口
中for之后的形式变量必须使用%
来引用,因此其在cmd窗口中的基本形态为:
1 | For %var in (set) do command [command-parameters] |
同样的,在批处理文件
中for之后的形式变量必须使用%%
来引用,因此其在批处理文件中的基本形态为:
1 | For %%var in (set) do command [command-parameters] |
注意
1.For、in和 do 不能分开使用。
2.对于var,可为26个字母的任意一个,并且区分大小写。
3.语句set两旁的括号不可省略。
4.无论何时,不能没有变量。
eg1-遍历字符:
1 | @echo off |
输出结果为:
1 | ABC |
分析:
首先,该语句将A赋予到变量i中,之后执行后面的@echo %%i命令,输出结果A。接着,该语句将B赋予到变量i中,之后执行后面的@echo %%i命令,输出结果B,如此循环直到(A B C)中所有元素
被提取完毕,循环结束。
eg2-遍历换行字符:
1 | @echo off |
输出结果为:
1 | A |
如果把空格换成逗号,等号是等效
的。
eg3-遍历数字:
1 | @echo off |
运行后屏幕上将会打印100个”man!”。
其类似for (i=0; i<n; i++)
。
eg4-遍历文件:
1 | For %%F in (*.txt) do ( |
将会遍历文件夹下所有后缀为.txt
的文件。
eg5-嵌套循环:
1 | For %%i in (1 2 3) do ( |
此处将两个for循环
嵌套使用,输出数值将成对出现。
eg6-遍历字符串:
可以用此循环遍历字符串,并按指定分隔符分割字符串。
1 | Set text=A,B,C |
提示
“tokens=1-3” 用于指定获取前三个部分。
“delims=,” 用于指定逗号作为分隔符。
运行结果为:
1 | A |
do while 循环
注意
批处理中并没有此结构,只可以通过goto循环与条件判断模拟,不常用。
eg:
1 | @echo off |
counter的初始值为1
,每循环一次+1
。当counter
的值到5
时,将结束循环。
do until 循环
注意
批处理中并没有此结构,只可以通过goto循环与条件判断模拟,不常用。
while与until是相反的。
eg:
1 | @echo off |
执行结果与do while
相同。
无限循环
危险
无限循环可能存在危险性,请不要滥用,更不要以此来整别人,严重情况可能导致系统崩溃,文件丢失
等,后果自负!
eg1:
1 | @echo off |
此操作将在屏幕上持续打印”man!”,时间间隔为1秒
。
eg2:
1 | %0 |%0 |
此操作将无限打开cmd.exe
直到系统资源不足导致死机,可能需要重启才能恢复。