# Loop (普通)

重复执行一系列命令: 可以指定表示重复次数的数字或直到遇到 break.

    Loop , Count

## 参数

Count

  执行循环体(重复) 的次数. 如果省略, Loop 会无期限继续, 直到遇到 break 或 return.

  如果 Count 是一个变量引用例如 %ItemCount%, 每当此变量为空或包含小于 1 的数字时, 循环会被完全跳过.

  由于必须支持文件模式循环, Count 不可以为表达式. 不过, 和所有的非表达式参数一样, 通过在表达式之前加上 % 和空格可以强制使用它. 例如: `Loop % Count + 1`. 此时, 表达式仅在循环开始之前被求值一次.

## 备注

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

此命令的常见用途是无限循环, 在循环 体 中某个地方使用 break 命令来决定何时停止循环.

在循环中鼓励使用 break 和 continue 代替 goto, 因为它们通常可以让脚本更容易理解和维护. 也可以创建 "While" 或者 "Do...While/Until" 循环时, 在循环 体的最开始或最后一个语句中使用 IF 语句, 在其中根据条件执行 break 命令. 但使用 While 或者 Loop...Until 通常是首选的.

内置变量 A_Index 包含当前循环重复的次数. 首次执行循环体时其值为 1. 第二次时其值为 2; 依此类推. 如果一个内层循环包含在一个外层循环中, 那么内层循环具有优先权. A_Index 在所有类型的循环中都有效, 包括文件循环和注册表循环; 但是在循环外部时 A_Index 值为 0.

在普通循环中可以使用 One True Brace(OTB) 风格(但不适用于专用循环例如, 文件模式和解析). 例如:

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

专用循环: 循环可以用来自动获取文件, 文件夹或注册表项(每次一个). 请参阅文件循环和注册表循环了解详细信息. 此外, 文件读取循环可以对整个文件的内容进行操作, 每次一行. 最后, 解析循环可以对包含在可分隔的字符串中的单独片段进行操作.

## 相关

Until, While 循环, For 循环, 文件和文件夹循环, 注册表循环, 文件读取循环, 解析循环, Break, Continue, 区块

## 示例

创建一个有 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
    }

dftg