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-loopregistry-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