[AutoHotKey]Loopコマンドを使った2種類のループ処理

多くのプログラミング言語にループ処理があるように、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

プログラミング言語に触れている方にはお馴染みのcontinuebreakも使用可能です。

この場合、引数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)
タイトルとURLをコピーしました