重复执行一系列命令, 一直到指定的表达式计算结果为假.
While Expression While(Expression)
任何有效的表达式. 例如: while x < y
.
在每次重复执行前都会计算一次表达式. 如果表达式计算结果为 true(即除空字符串和数值 0 以外的任何结果), 那么执行循环体; 否则跳到循环体之后一行执行.
while 循环后通常跟着区块, 这是组成循环 体 语句的集合. 不过, 在单语句的循环中可以不使用区块(用于此目的时 "if" 与其相匹配的 "else" 一起被视为单语句).
可以使用 One True Brace(OTB) 风格, 这样允许左大括号与 while 在同一行而不是在其下面. 例如: while x < y {
.
内置变量 A_Index 包含当前循环重复的次数. 首次计算循环的表达式和执行循环体时其值为 1. 第二次时其值为 2; 依此类推. 如果一个内层循环包含在一个外层循环中, 那么内层循环具有优先权. A_Index 在所有类型的循环中都有效, 但是在循环外部时其值为 0.
和所有的循环一样, 可以使用 Break 提前退出循环. 同样地, 可以使用 Continue 跳过当前循环的剩余部分, 此时 A_Index 增加 1 且重新计算 while 循环的表达式. 如果结果仍为 true, 开始新的循环; 否则循环结束.
专用循环: 循环可以用来自动获取文件, 文件夹或注册表项(每次一个). 请参阅文件循环和注册表循环了解详细信息. 此外, 文件读取循环可以对整个文件的内容进行操作, 每次一行. 最后, 解析循环可以对包含在可分隔的字符串中的单独片段进行操作.
Until, Break, Continue, 区块, Loop, For 循环, 文件和文件夹循环, 注册表循环, 文件读取循环, 解析循环, If (表达式)
#1: 当用户按住鼠标左键拖动时, 在拖动区域中会出现工具提示区域的大小.
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