if (expression)if (expression)
expressionが空文字列でも数値の0でもないときにtrueと評価され、続く行またはブロックが実行されます。
コマンドが1つならば、次の行にそれを記述します。
if (expression) command1
同一行に、if(expression) command1
のようには記述できません。
コマンドが複数ならばかっこで囲み、次のようにします。
if (expression) { command1 command2 }
真偽値を返す関数を呼び出す場合には、かっこを省略してIfコマンドとして記述できます。
if IsDone ; (IsDone)ではない
{
...
}
この形式のときは、右辺は既定で文字列として解釈されます。よって変数aと変数bを比較するには、
if a = %b%
のように、右辺のみを%で囲みます。また文字列と比較するときIf式では
if( a = "ABC" )
のようにダブルクォーテーションで囲むのに対し、Ifコマンドでは囲みません。
if a = ABC
演算子のほかに、専用のコマンドを使用する形式もあります。コマンド形式の場合には、真 (true) のときに実行するコマンドをカンマで区切って記述します。
意味 | コマンド形式 | 等価な演算子 |
---|---|---|
等値 | IfEqual, var, value |
if var = value |
等値 (大文字/小文字を区別する) |
なし | if var == value |
非等値 | IfNotEqual, var, value |
if var != value if var <> value |
大なり | IfGreater, var, value |
if var > value |
小なり | IfLess, var, value |
if var < value |
以上 | IfGreaterOrEqual, var, value |
if var >= value |
以下 | IfLessOrEqual, var, value |
if var <= value |
この形式では最初のパラメータは、つねに変数として解釈されます。このことから0、1、2…はスクリプト プロパティとみなされるため、記述の順に注意が必要です。
右辺に何も記述しないと、空文字列との比較となります。
if a =
または!演算子を使用して、
if !a
としても同じです。
IfInString, var, SearchStringIfInString / IfNotInString
var := "Apple"
key := "P"
IfInString, var, %key%
{
; 一致した場合の処理
}
StringCaseSenseでOnと指定しない限り、文字列の比較で大文字/小文字は区別されません。
逆に一致しない場合を想定するならば、IfNotInStringを用います。
IfNotInString, var, SearchString
また一致する位置も重要ならば、StringGetPosを用います。
If var [not] between LowerBound and UpperBound
If var is [not] type
If var [not] in value1,value2,...
If var [not] contains value1,value2,...
value1、value2...のいずれかに一致したときに結果が真となります。その比較はすべて、文字列として比較されます。"contains"演算子による比較は、IfInStringコマンドのそれと同一です。If var [not] in/contains value1,value2,...
カンマの前後のスペースとタブも文字列の一部とみなされ、比較対象となります。
IfWinActive [, WinTitle, WinText, ExcludeTitle, ExcludeText]
IfWinNotActive [, WinTitle, WinText, ExcludeTitle, ExcludeText]
IfWinExist [, WinTitle, WinText, ExcludeTitle, ExcludeText]
IfWinNotExist [, WinTitle, WinText, ExcludeTitle, ExcludeText]
ElseElse
elseは同一行にある他のコマンドも評価するため、"else if"の構文 (if-else-if ladders) も記述できます。
if( a < 0 ) { ... } else if( b < 0 ) { ... } else { ... }
elseは、ifコマンド以外にも適用できます。
IfInString, str, sample { ... } else { ... }
短絡評価がサポートされるため、次のような構文が可能です。Short-circuit Boolean Evaluation - Functions
if( ColorName <> "" AND not FindColor( ColorName ) ) MsgBox %ColorName% could not be found.
Switch [SwitchValue] { Case CaseValue1: Statements1 Case CaseValue2a, CaseValue2b: Statements2 Default: Statements3 }Switch
v1.1.29以降でサポートされます。
Loop [, Count]Loop
Count回数またはbreakに出会うまでループをくり返します。
Loop { ; くり返す処理 break } Loop, 10 { ; くり返す処理 }
キー入力をくり返すだけならばこれを用いる必要はなく、Sendで対応できます。
通常は処理が完了するまでループがくり返されますが、これを中断できるようにするにはGetKeyStateなどで入力を監視して、breakでループを抜けます。
Loop, 10 { SoundBeep Sleep, 100 GetKeyState, state, Escape if( state = "D" ) break }
パラメータ | 機能 | |
---|---|---|
Files | 複数のファイルまたはフォルダから、パターンに一致するファイルの情報を1つずつ取得できる | Loop (files & folders) |
Parse | 文字列から、部分文字列を1つずつ | Loop (parse a string) |
Read | テキストファイルから、1行ずつ | Loop (read file contents) |
Reg | レジストリから、キーを1つずつ | Loop (registry) |
Loopから抜けます。これはLoop内でのみ有効です。
Break [, LoopLabel]Break
Loopがネストされているときには、LoopLabelで適用対象のLoopを指定できます。LoopLabelはLoopに付けられたラベル、もしくはネストレベルを表す数値で指定します。
Continue [, LoopLabel]Continue
For Key [, Value] in ExpressionFor-loop
Expressionのオブジェクトの数だけ、それをKeyとValueに値を格納しながらくり返します。
array := {"A":10, "B":20}
for k, v in array
MsgBox, % k v ; A10, B20 と出力
While ExpressionWhile-loop
指定されたラベルへジャンプし、実行を継続します。
Goto, LabelGoto
Gosubと異なりreturnから制御が戻らないため、Gotoに後続する文は実行されません。
Goto, Label1
; ここは処理されない
Label1:
...
return
Gosub, LabelGosub
指定されたラベルの行へジャンプし、returnまで処理を実行します。
Label1: ; ラベル ... return ^a:: ; ホットキーラベル ... return
Gosub, Label1 ; ラベルでの呼び出し Gosub, ^a ; ホットキーラベルでの呼び出し
Return [, Expression]Return
サブルーチンから戻ります。
サブルーチンからの呼び出しではないときは、代わりにExitが実行されます。
Throw [, Expression]Throw
Throwした例外をtry-catchで捕捉しないと、エラーのダイアログが表示され、実行中のスレッドが終了します。
Try { Statements } Catch [, OutputVar] { Statements }Try Catch
try
throw "TEST"
catch e
MsgBox, % e ; "TEST"
Try、Catchは実行時エラーも捕捉できます。この実行時エラーには2種類あり、ErrorLevelを設定するものと、エラーメッセージを表示してスレッドを抜けるものです。
指定時間が経過するまで、次の処理を待機させます。
Sleep, DelayInMillisecondsSleep
待機させる時間を、DelayInMillisecondsでミリ秒で指定します。指定可能な範囲は0 ~ 2,147,483,647 (2³¹ - 1) で、最長でおよそ24日間です。
以下の値は特別な意味を持ちます。
Sleepによる待機中も、ホットキーなどによる他のスレッドの起動ができます。
一定時間ごとに、特定のサブルーチンをくり返し実行させます。
SetTimer [, Label, ; 実行するサブルーチンのラベル Period|On|Off, Priority ] ; タイマーのスレッド優先度。-2147483648~2147483647の値SetTimer
パラメータ | 機能 |
---|---|
Period | 実行周期。単位はミリ秒で、4294967295以下の整数。未指定の場合の既定値は250 |
On | タイマーを再開する。まだ開始していない場合は、既定の周期 (250ミリ秒) で開始する |
Off | タイマーを停止する。 |
処理を1回だけ実行させるには、呼び出されたルーチンでタイマーを停止させます。
A:: SetTimer, Label1, 100 ; 100ミリ秒後に呼び出し return Label1: SetTimer, Label1, Off ; タイマーを停止 ; 何らかの処理 return
Exit [, ExitCode]Exit
現在のスレッドを終了させます。スクリプトがPersistentではなく、ホットキーも含まないときにはスクリプト全体を終了させます。無条件にスクリプト全体を終了させるにはExitAppコマンドを使用します。
ExitApp [, ExitCode]ExitApp
無条件にスクリプトを終了させます。