# While-loop [v1.0.48+]

重复地执行一系列命令直到指定的 expression(表达式) 值为 false(假).

While Expression

#### 参数

Expression | 任何合法的 expression(表达式)。例如：while x < y

#### 注意

每次循环之前表达式的值都会被计算一次。如果表达式的值为 true(真) (即除了空字符串或者数值 0 之外的任何其他结果)，那么循环体将被执行；否则，脚本跳至循环体之后一行执行。

一个 while-loop 之后通常有一个 block(块)，它是循环 body(体) 语句的集合。不过，循环仅有一条语句时不需要一个块(一个 "if" 以及它的 "else" 用作这种目的算作一条语句)。

One True Brace (OTB) 编码风格可以被使用，它允许开括号出现在语句的同一行而不是下面。例如：while x < y {

内置变量 A_Index 记录了当前循环执行的次数。循环表达式和循环体第一次执行时它为 1。第二次执行时它为 2；依次类推。如果一个内部循环在一个外部循环中，内部循环优先使用 A_Index。A_Index 在任何类型的循环内部工作，但是在循环外它被置为 0 。

和所有循环相同，Break 可以被用来提前结束循环。还有，Continue 可以被用来跳过当前循环的剩余部分。这时 A_Index 加 1，循环表达式被重新计算。如果它认为 true(真)，新的循环开始；否则循环结束。

专用循环：循环可以被用于自动获取文件，文件夹或者注册表项(一次一个)。详见 file-loop 和 registry-loop 。另外，file-reading loops 能够操作一个文件的所有内容，一次一行。最后，parsing loops 能够操作一个被分隔字符串中的独立部分。

#### 相关命令

Break, Continue, Blocks, Loop, Files-and-folders loop, Registry loop, File-reading loop, Parsing loop, If (expression)

#### 示例

    ; 当用户拖曳鼠标左键时，一个 ToolTip(提示框) 在拖拽区域内显示区域的大小。

    CoordMode, Mouse, Screen

    ~LButton::
        MouseGetPos, begin_x, begin_y
        while GetKeyState("LButton")
        {
            MouseGetPos, x, y
            ToolTip, % begin_x ", " begin_y "`n" Abs(begin_x-x) " x " Abs(begin_y-y)
            Sleep, 10
        }
        ToolTip
    return