サンプルコード

Autoit|異なる名前の複数のフォルダー下から指定したファイルを検索

Autoit でファイルを検索する際に、あるフォルダー下にある複数のフォルダーの中から、指定したファイルを探したいということがあると思います。

今回は、_FileListToArray 関数を使用して、異なる名前の複数のフォルダー下から指定したファイルを検索するサンプルコードを紹介します。

_FileListToArray

指定したフォルダーのファイル、またはフォルダーリストの配列を作成します。

形式:_FileListToArray(フォルダーのパスを指定 [, 使用するフィルター = “*” [, フラグ = 0[, 返すパス = False]]])

パラメーター

$sFilePathファイルリストを生成するフォルダのパス。
$sFilter [オプション] 使用するフィルター。デフォルトは * です。
$iFlag[オプション] ファイルまたはフォルダー、またはその両方を返すかどうかを指定します。
0 = (デフォルト) ファイルとフォルダーを返す
1 = ファイルのみを返す
2 = フォルダーのみを返す
$fReturnPath[オプション]
True = フル パスを使用
False = $sFilePath からの相対パスを使用、デフォルトは False です。

返し値

成功:返される配列は1次元で次のような構造をしています。
$array[0] = 返されたファイル\フォルダの数
$array[1] = 1番目のファイル\フォルダ
$array[2] = 2番目のファイル\フォルダ
$array[3] = 3番目のファイル\フォルダ
$array[n] = n番目のファイル\フォルダ
失敗:@error を 0 以外に設定します。
@Error:1 – フォルダが存在しないか無効です
2 – $sFilter のパラメータ値が無効です
3 – $iFlag のパラメータ値が無効です
4 – ファイルが見つかりません

サンプルコード

ファイルリストを生成するフォルダのパスを $aPath = “C:\Program Files (x86)\autoit3\SciTE”

探すファイルを $sFile = “\FD.exe” とします。

SciTE フォルダーには複数のフォルダーがあり、各フォルダーの中から「FD.exe」を探し出し、メッセージボックスに表示します。

SciTE フォルダー

#include <File.au3>

$aPath = "C:\Program Files (x86)\autoit3\SciTE"
$sFile = "\FD.exe"

$_Array = _FileListToArray($aPath, "*", 2, True)

For $i = 0 To UBound($_Array) - 1
    If FileExists($_Array[$i] & $sFile) Then MsgBox(0, $_Array[$i], $_Array[$i] & $sFile)
Next

コードの解説

$_Array = _FileListToArray($aPath, "*", 2, True)

_FileListToArray($aPath, “*”, 2, True)

フラグで「2」を指定し、フォルダーのみを返しています。

オプションで「True」を指定し、フルパスを返すようにしています。

_FileListToArray 関数は配列を返し、変数 $_Array には SciTE フォルダー下のすべてのフォルダー名が代入されます。

このフォルダー名は、オプションで「True」を指定していますので、フルパスが代入されています。

例えば「api」フォルダーなら「C:\Program Files (x86)\autoit3\SciTE\api」となります。

オプションを指定しない場合、「False」となるので、「api」のみが代入されます。

条件付きループ For を使用し、各フォルダー内に「FD.exe」存在するかを FileExists 関数で判断し、ファイルが存在すればメッセージボックスで「FD.exe」のフルパスを表示します。

コメント