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」を探し出し、メッセージボックスに表示します。
#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」のフルパスを表示します。
コメント