AutoHotkeyで目的のファイルを探すLoopコマンド

こんにちは、生焼けです。

今回は、AutoHotkeyで条件に当てはまるファイルを探す時に便利なLoopコマンドについて解説していきます。

キーの指定(^+r:: など)は省略しています。

AutoHotkeyのついての記事はこちら

絶大なるカスタマイズ性、AutoHotkey
これがないと生きていけない。 とまでは言いませんが、「AutoHotkey」がないとパソコン触りたくないレベルかも。 このページでは、パソコンの操作を劇的に自分好みにしてくれるカスタマイズソフト 「A …
スポンサーリンク

Loopコマンドとは?

条件にあったファイル全てに動作をさせられる!

このAutoHotkeyのファイル操作の記事でも触れましたが、Loopコマンドは条件にあったファイルを探し、その1つ1つに動作を行わせることができるという便利なコマンドです。

例えば、あるフォルダに入ったテキストファイル全てになにかを動作させたい…といった場合に使います。

書き方を簡単に書くと、下のような感じです。

Loop,動作させたいファイルの条件
{
動作
}
return

ワイルドカードを利用して検索する

ファイルの検索にはワイルドカードを利用します。

ワイルドカードとは?

ワイルドカード」とは、なんの文字にでも置き換えられる記号…みたいなもののことです。

2種類あり、0文字以上の文字を表す「*」1文字のみを表す「?」があります。

「*」の場合

*.txt

で、ファイル名に関わらず「.txt」が拡張子のもの全てを表すことができます。

「?」の場合

tamesi.???

ファイル名が「tamesi」で”jpg”など拡張子が3文字ぴったりのものを表すことができます。

このワイルドカード「*」を用いて

Loop,D:\folderA\*.txt
{
MsgBox,テキストファイルがありました。
}

とすると、folderAにあるテキストファイルの個数分「テキストファイルがありました。」と表示されます。

つまり、folderAにあるテキストファイルが5つあった場合、5回「テキストファイルがありました。」と表示されるということです。

フォルダを探す場合

デフォルトでは、ファイルのみを探すようになっています。

ファイルとフォルダどちらも探す場合は「,1」フォルダだけを探す場合は「,2」を最後につけます。

Loop,D:\folderA,2
{
MsgBox,folderAがあったよ!
}
return

サブフォルダも検索する

デフォルトでは、指定したフォルダのみ検索されます。

指定したフォルダ以下(サブフォルダ)も検索に含める場合は「,,1」を最後につけます。フォルダを探す場合は「,2,1」と書きます。

Loop,D:\folderA\*.jpg,,1
{
MsgBox,%A_LoopFileFullPath%
}
return

とした場合、folderAの中だけでなく、folderA以下にあるフォルダの中も含めてjpgが検索されます。

組み込み変数

上に書いたことだけでも便利なんですが、なんとLoopコマンドでは取得したファイルのファイル名パスなどの情報を変数として取得することができます

変数とは(イメージ)

頭の中に赤いマグカップを思い浮かべてください

その中に水を注ぎます。一旦水を捨て、今度はオレンジジュースを入れます。ジュースを全部飲み干し、次はコーヒーを注ぎます

「じゃあ、今その赤いマグカップの中身は何が入っていますか?」と聞かれたら、もちろん「コーヒー」と答えますよね。

この「赤いマグカップ」の役割が変数に似ています。

つまり、変数とは中身を変えられる、文字や数字などを入れるための名前のついた容器のようなもの、みたいな感じだと思ってください。

AutoHotkeyでの変数の書き方

AutoHotkeyの書き方で変数の中に中身を入れるには、

;変数名 = 中身
hensuu = nakami
hensuu1 = 1

のように書きます。(他の言語とは違い、文字列でも基本””などはいらない)

変数を展開(中身を表示)するには%hensuu%のように変数名の前後に%をつけます。

赤いマグカップに起こったことを表すと、下記のようになります。

redcup = water
redcup = orangejuice
redcup = coffee
MsgBox,%redcup%
;最後に入れたcoffeeが表示されます

Loopコマンドで取得したファイルの情報は、あらかじめAutoHotkey側で用意された変数(組み込み変数)に入ります

この変数を利用すれば、条件に当てはまるファイル1つ1つのファイル名を取得する…なんてこともできます。

どんなふうに使うのか

例えば、folderAにある全てのテキストファイルのファイル名を取得したい時。

Loopコマンドでファイル名が格納される変数の名前は”A_LoopFileName”なのでこれを使います。

先程も言った通り、変数を展開(中身を表示)するには”%A_LoopFileName%”のように変数の前後に%を付ける必要があります

なので、それぞれのファイル名を表示させたい場合

Loop,D:\folderA\*.txt
{
MsgBox,%A_LoopFileName%
}
return

のように書きます。

これを動かした場合、folderAに下の3つのテキストファイルがあったとすると

  • D:\folderA\mituketa.txt
  • D:\folderA\sagasita.txt
  • D:\folderA\sottiniikuyo.txt

「mituketa.txt」「sagasita.txt」「sottiniikuyo.txt」と計3回メッセージが表示されます。

主な変数

組み込み変数はこのWikiのLoopコマンドのページに書いてある通り色々ありますが、ここではよく使うであろうものをご紹介します。

例:“2020年7月18日14時50分30秒”に作成され、“2020年7月20日14時50分30秒”に更新された“D:\folderA\mituketa.txt”というファイルがあるとすると、取得される情報は以下のようなものになります。

変数名中身
A_LoopFileNameファイル名mituketa.txt
A_LoopFileExt拡張子txt
A_LoopFileFullPathフルパスD:\folderA\mituketa.txt
A_LoopFileTimeModified更新日時20200720145030
A_LoopFileTimeCreated作成日時20200718145030

A_LoopFileName/ファイル名の取得

“mituketa.txt”のようにファイルの名前+拡張子を取得します。

Loop,D:\folderA\*.txt
{
MsgBox,ファイル名は%A_LoopFileName%
}
return

A_LoopFileExt/拡張子の取得

“txt” のように拡張子のみを取得します。

Loop,D:\folderA\*.txt
{
MsgBox,拡張子は%A_LoopFileExt%
}
return

A_LoopFileFullPath/フルパスの取得

“D:\folderA\mituketa.txt”のようにフルパスを取得します。

Loop,D:\folderA\*.txt
{
MsgBox,フルパスは%A_LoopFileExt%
}
return

ファイルのフルパスを取得した場合、SplitPathを使ってパスを分解することも出来ますがその解説は長くなるので、また今度。

WikiのSplitPathのページ

Google Sites: Sign-in
Access Google Sites with a personal Google account or Google Workspace account (for business use).

A_LoopFileTimeModified/更新日時の取得

“20200720145030”のようにファイルの更新日時がYYYYMMDDHH24MISS形式で取得されます。

Loop,D:\folderA\*.txt
{
MsgBox,更新日時は%A_LoopFileTimeModified%
}
return

このままでは使いづらいのでFormatTimeコマンドなどを使用して、体裁を整えるのがオススメです。

Loop,D:\folderA\*.txt
{
FormatTime, TimeString, %A_LoopFileTimeModified%, yyyy年MMMMdd日dddd,hh:mm:ss tt
MsgBox,%TimeString%
;例 20200720145030→ 2020年7月20日,02:50:30 午後  と表示される
}
return

WikiのFormatTimeのページ

Google Sites: Sign-in
Access Google Sites with a personal Google account or Google Workspace account (for business use).

A_LoopFileTimeCreated/作成日時の取得

“20200718145030”のようにファイルの作成日時がYYYYMMDDHH24MISS形式で取得されます。

Loop,D:\folderA\*.txt
{
FormatTime, TimeString, %A_LoopFileTimeModified%, MMMMd日tth時
;例 20200718145030→7月18日午後2時 と表示される
MsgBox,作成日時は%TimeString%です
}
return

こちらも更新日時と同様にFormatTimeコマンドと一緒に使うのをおすすめします。

検索を途中でやめる

ループを止めるbreak

検索を止めたいときは、”break”を使います。

“break”を使えばあるファイルが検索にひっかかったときに検索をやめる、といったことが出来ます。

例えば、“mituketa.txt”が見つかったら検索をやめたい場合

Loop,D:\folderA\*
if A_LoopFileName = mituketa.txt 
{
MsgBox,%A_LoopFileName%があったので終了します。
break
}
else
{
MsgBox,%A_LoopFileName%なので続けます。
}
}
return

のように書きます。

まとめてきな

今回はファイル検索に便利なLoopコマンドについて紹介しました。

複数のファイルについて操作したいときや、検索したファイルの情報を取得したい時などに使えます。

関連記事

AutoHotkeyでファイルを操作する方法
今回は、AutoHotkeyで出来るファイルの操作について解説します。フォルダやファイルの表示、作成、複製、移動、リネーム、検索が自動でできて便利です。

参考記事

Google Sites: Sign-in
Access Google Sites with a personal Google account or Google Workspace account (for business use).
タイトルとURLをコピーしました