Loop (normal)

重复执行一或多条语句: 可以指定表示重复次数的数字或直到遇到 Break.

Loop Count

参数

Count

类型: 整数

如果省略, 则循环无限地继续, 直到遇到 BreakReturn. 否则, 指定执行循环的次数(迭代). 但是, 显式的空值或小于 1 的数字将导致完全跳过循环.

Count 只在循环开始之前计算一次. 例如, 如果 Count 有附加作用的表达式(如, 函数调用或赋值), 附加作用仅发生一次.

如果 Count 用括号括起来, 则不需要空格或制表符. 例如: Loop(2)

备注

循环语句后通常跟着区块, 这是构成循环 主体 语句的集合. 但是, 在单语句的循环中可以不使用区块(用于此目的时 "if" 与其相匹配的 "else" 一起被视为单语句).

这个语句的一个常见用法是无限循环, 然后在循环 主体 中的某个地方使用 Break 语句来确定何时停止循环.

在循环中鼓励使用 BreakContinue 代替 Goto, 因为它们通常可以让脚本更容易理解和维护. 也可以通过将循环 主体 的第一个或最后一个语句作为有条件地发出 Break 语句的 IF 语句来创建 "While" 或 "Do...While/Until" 语句, 但使用 WhileLoop...Until 通常是首选的.

内置变量 A_Index 包含当前循环迭代的次数. 首次执行循环 主体 时其值为 1. 第二次时其值为 2; 依此类推. 如果一个内层循环包含在一个外层循环中, 那么内层循环具有优先权. A_Index 在所有类型的循环中都有效, 包括 file-loopsregistry-loops; 但是在循环外部时 A_Index 值为 0.

A_Index 可以由脚本赋值为任何整数值. 如果指定 Count, 则更改 A_Index 会影响将要执行的迭代次数. 例如, A_Index := 3 会使循环语句的行为好像是第三次迭代(A_Index 将在下一次迭代为 4), 而 A_Index-- 将防止当前迭代计入总数中.

循环后面可以有一个可选的 Else 语句, 如果 Count 为零, 则执行 Else 语句.

可以选择使用 One True Brace(OTB) 样式. 例如:

Loop {
    ...
}
Loop RepeatCount {
    ...
}

专用循环: 循环可以用来自动检索文件, 文件夹或注册表项(每次一个). 有关详情, 请参阅 file-loopregistry-loop. 此外, file-reading loops 可以对整个文件的内容进行操作, 每次一行. 最后, parsing loops 可以对可分隔的字符串中包含的各个字段进行操作.

Until, While-loop, For-loop, Files-and-folders loop, Registry loop, File-reading loop, Parsing loop, Break, Continue, 区块, Else

示例

创建一个有 3 次迭代的循环.

Loop 3
{
    MsgBox "Iteration number is " A_Index  ; A_Index 将为 1, 2, 接着 3
    Sleep 100
}

创建一个无限循环, 但会在第 25 次迭代后终止.

Loop
{
    if (A_Index > 25)
        break  ; 终止循环
    if (A_Index < 20)
        continue ; 跳过后面并开始新的迭代
    MsgBox "A_Index = " A_Index ; 这里将仅显示数字 20 到 25
}