#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.8.0
Author: H. Tsubota
Script Function:
カレントフォルダ(通常はスクリプトのあるフォルダ)以下のAutoItスクリプト(拡張子au3)を
検索し、配列にして返す
dirコマンドを使った実装
#ce ----------------------------------------------------------------------------
#include <Array.au3>
#include <Constants.au3>
Local $result = Search("au3")
If 0 <= $result[0] Then
_ArrayDisplay($result, "見つかったファイル")
Else
MsgBox(0, "", "Error occurred")
EndIf
; カレントフォルダ以下を検索し、見つかったファイルを配列にして返す
; $extension ファイル拡張子。指定が無い場合は任意のファイル。
; $recursively サブフォルダを再帰的に検索するかどうか。デフォルトでは再帰的に検索する。
; 成功 : 見つかったファイル名の配列。1要素目は見つかったファイルの数。
; 失敗 : 1要素目が-1の配列
Func Search($extension = Default, $recursively = True)
Local $child
Local $buffer
Local $command
; コマンドを作成
$command = @ComSpec & " /c dir"
; 検索するファイルの拡張子指定
If $extension = Default Then
$command &= " *.*"
Else
$command &= " *." & $extension
EndIf
; サブフォルダを検索するかどうか
If $recursively Then
$command &= " /b /s"
Else
$command &= " /b"
EndIf
; dirを実行
$child = Run($command , @WorkingDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
; dirが処理を返すのを待って標準出力を読み取る
Local $dirResult = ""
While 1
SetError(0)
$buffer = StdoutRead($child)
If @error Then
ExitLoop
EndIf
Sleep(100)
$dirResult = $buffer
Wend
; dirの結果から結果配列を作成
Local $result[1]
if $dirResult <> "" Then
$result = StringSplit($dirResult, @CRLF, 1)
$result[0] = _ArrayDelete($result, $result[0])
$result[0] -=1
Else
$result[0] = -1
EndIf
Return $result
EndFunc