多くのプログラミング言語にループ処理があるように、AutoHotKeyにもLoopを使ったループ処理が存在します。
今回はLoopの2種類の使い方をご紹介しましょう。
Loopで指定回数繰り返す
まずは1つ目、繰り返し作業です。
Loop [, Count]
;Countの回数だけ繰り返す(Countを省略した場合は無限)
指定回数だけ繰り返すという非常に単純なコマンド。使用例を見ていきましょう。
!p::
Loop, 3
{
MsgBox, %A_index%回目
}
Alt+Pでダイアログが3回出てきます。ループ回数はA_indexという組み込み変数に格納され、1から順に増えていきます。
Continueとbreak
!p::
Loop
{
if(A_Index == 2)
continue ;A_indexが2のときは処理を飛ばす
if(A_Index == 5)
break ;A_indexが5になればここで終了
MsgBox, %A_index%回目
}
return
プログラミング言語に触れている方にはお馴染みのcontinueやbreakも使用可能です。
この場合、引数Countは省略されていますが、ダイアログに表示される数値は「1,3,4」のみとなります。当然ですがbreakが無いと無限にループされるので気を付けてください。
マウスの座標を表示する
!p::
CoordMode,Mouse,Screen
Loop{
MouseGetPos, x, y
ToolTip, X:%x% Y:%y%
if(x+y == 0){
ToolTip
break
}
}
return
Loopの使用例としてもう1つ簡単な例をご紹介します。上のコードではマウスの現在位置(絶対座標)をツールチップに表示するという動作をループ処理し、マウスの移動に追従する形で座標を表示し続けます。
ツールチップは座標が「X = 0 , Y = 0」になると消滅します。画面の左上端にマウスを移動させてみてください。
ファイル/フォルダをループ処理
Loopにはもう1つの顔があります。それが「ファイルやフォルダを引数に取る」Loopです。
Loop, FilePattern [, IncludeFolders=0, Recurse=0]
;FilePatternで指定したディレクトリやファイルに対してループ処理を行う
こちらのLoopは指定パスのループ処理を行います。試してみましょう。
!o::
Loop, %A_MyDocuments%\test\* ;A_MyDocumentsはドキュメントフォルダを示す変数
{
Gui, add,Text, ,%A_LoopFileName%`n ;ファイルの名前をGUIに加える
}
Gui, Show
Return
ループにかけているのはドキュメントフォルダにあるtestフォルダです。その後のアスタリスクはワイルドカード(何でもアリ)で、「このフォルダにあるモノの種類は問わない」としています。*.txtなどとすることで、「名前は問わないが拡張子が.txt」などを指定することもできます。
オプションを指定しなければ、Loopはフォルダの中にあるファイルに対して処理を行います。サブフォルダは含みません。
ファイル構造がこの様になっていたとします。
test
├── 001.txt
├── 002.txt
├── 003.txt
├── sub1
│ ├── 001.bmp
│ ├── 002.bmp
│ └── 003.bmp
└── sub2
├── 001.pdf
├── 002.pdf
└── sub3
└── 003.pdf
このコードを走らせると、

testフォルダに置かれたファイルのみリストアップされ、GUIウインドウにファイル名が表示されました。
IncludeFoldersオプション
次にオプションを指定してみましょう。第二引数のIncludeFoldersはリストアップする対象を選択するオプションです。
| 引数に入れる値 | 意味 |
|---|---|
| 0 (デフォルト) | ファイルのみが対象 |
| 1 | ファイルとフォルダが対象 |
| 2 | フォルダのみ対象 |
!o::
Loop, %A_MyDocuments%\test\*,1 ;IncludeFolders = 1
{
Gui, add,Text, ,%A_LoopFileName%
}
Gui, Show
Return
オプションで1を選択すると、

1階層目にあればフォルダも検索対象となり、リストアップされます。
Recurseオプション
第三引数はRecurseです。デフォルトは0ですが、1にするとサブフォルダも検索対象とします。
!o::
Loop, %A_MyDocuments%\test\*,,1 ;Recurse = 1
{
Gui, add,Text, ,%A_LoopFileName%
}
Gui, Show
Return

testフォルダの中にあるフォルダは全て検索対象となり、そこに存在するファイルは全てリストアップされました。
Loopで使える組み込み変数
今回のコードではA_LoopFileNameでファイル名を取り出していますが、Loop内で使用できる組み込み変数はこの他にも多くあります。使用頻度が高いであろうものを抜粋してますので、確認してみてください。
| 変数名 | 値 |
|---|---|
| A_LoopFileName | 拡張子を含むファイル名 |
| A_LoopFileFullPath | ファイルのフルパス |
| A_LoopFileDir | ファイルが置かれているディレクトリ |
| A_LoopFileTimeCreated | 作成日時 |
| A_LoopFileTimeModified | 最終更新日 |
| A_LoopFileTimeAccessed | 最終アクセス日時 |
| A_LoopFileSize | ファイルサイズ(Byte) |
| A_LoopFileSizeKB | ファイルサイズ(KB) |
| A_LoopFileSizeMB | ファイルサイズ(MB) |

