Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Array.au3> ; для _ArrayDisplay
- ; i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
- ; все файлы папки WINDOWS в виде массива
- $timer = TimerInit()
- $FileList=_FileSearch(@WindowsDir, '*', True, 100)
- $timer = Round(TimerDiff($timer) / 1000, 2) & ' сек'
- _ArrayDisplay($FileList, $timer&' - все файлы')
- ; i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
- ; только файлы exe и dll папки WINDOWS в виде списка
- $timer = TimerInit()
- $FileList=_FileSearch(@WindowsDir, 'exe;dll', True, 0, 1, 0)
- $timer = Round(TimerDiff($timer) / 1000, 2) & ' сек'
- MsgBox(0, $timer&' - exe;dll', $FileList)
- ; i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
- ; все файлы, кроме exe и dll папки WINDOWS в виде списка с относительными путями
- $timer = TimerInit()
- $FileList=_FileSearch(@WindowsDir, 'exe;dll', False, 0, 0, 0)
- $timer = Round(TimerDiff($timer) / 1000, 2) & ' сек'
- MsgBox(0, $timer&' - кроме exe;dll', $FileList)
- ; i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
- ; только файлы tmp и bak и gid папки WINDOWS в виде массива с относительными путями
- $timer = TimerInit()
- $FileList=_FileSearch(@WindowsDir, 'tmp;bak;gid', True, 100, 0)
- $timer = Round(TimerDiff($timer) / 1000, 2) & ' сек'
- _ArrayDisplay($FileList, $timer&' - tmp;bak;gid')
- ; i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
- ; Недопустимый символ в пути
- $FileList=_FileSearch('C:\WIN>DOWS', '*')
- If @error Then
- MsgBox(0, 'Ошибка', 'Код ошибки: '&@error)
- Exit
- EndIf
- ; i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!i!
- ; ============================================================================================
- ; Function Name ...: _FileSearch (__FileSearch, __FileSearchAll)
- ; AutoIt Version ....: 3.2.12.1+
- ; Description ........: Поиск файлов по маске в подкаталогах.
- ; Parameters:
- ; $Path - путь поиска
- ; $Mask - маска, допустима обычная маска функции FileFindFirstFile, либо перечисление расширений через ";"
- ; $exclude - (True / False) инвертировать маску, то есть исключить из поиска указанные типы файлов
- ; $Level - (0-100) уровень вложенности (0 - корневой каталог)
- ; $Full - 1 - полный путь, 0 - относительный
- ; $Arr - 1 - результат в виде массива (по умолчанию), иное - список с разделителем @LF
- ;@error: 1 - неверный путь, 2 - неверная маска (проверка допустимых символов)
- ; Return values ....: Массив или список
- ; Author(s) ..........: AZJIO
- ; ============================================================================================
- ; функция проверки и подготовки входных параметров
- Func _FileSearch($Path, $Mask = '*', $exclude=True, $Level=100, $Full=1, $Arr=1)
- Local $FileList
- If Not StringRegExp($Path, '(?i)^[a-z]:[^/:*?"<>|]*$') Or StringInStr($Path, '\\') Then Return SetError(1)
- If StringRight($Path, 1)='\' Then $Path=StringTrimRight($Path, 1)
- If $Mask = '' Then $Mask = '*'
- If StringInStr($Mask, '*') Or StringInStr($Mask, '?') Then
- If StringRegExp($Mask, '[\\/:"<>|]') Then Return SetError(2)
- $FileList=StringTrimRight(__FileSearchAll($Path, $Mask, $Level), 1)
- If $Full = 0 Then $FileList=StringRegExpReplace($FileList, '(?m)^(?:.{'&StringLen($Path)+1&'})(.*)$', '\1')
- If $Arr = 1 Then $FileList=StringSplit($FileList, @CRLF, 1)
- Return $FileList
- Else
- If StringRegExp($Mask, '[\\/:*?"<>|]') Then Return SetError(2)
- $Mask=';.'&StringReplace($Mask, ';', ';.')&';'
- $FileList=StringTrimRight(__FileSearch($Path, $Mask, $exclude, $Level), 1)
- If $Full = 0 Then $FileList=StringRegExpReplace($FileList, '(?m)^(?:.{'&StringLen($Path)+1&'})(.*)$', '\1')
- If $Arr = 1 Then $FileList=StringSplit($FileList, @CRLF, 1)
- Return $FileList
- EndIf
- EndFunc
- ; поиск указанных типов файлов
- Func __FileSearch($Path, $Mask, $exclude, $Level, $LD=0)
- Local $FileList='', $file, $s = FileFindFirstFile($Path&'\*')
- If $s = -1 Then Return ''
- While 1
- $file = FileFindNextFile($s)
- If @error Then ExitLoop
- If @extended Then
- If $LD>=$Level Then ContinueLoop
- $LD+=1
- $FileList&=__FileSearch($Path&'\'&$file, $Mask, $exclude, $Level, $LD)
- $LD-=1
- Else
- If StringInStr($Mask, ';'&StringRight($file, 4)&';') = $exclude Then $FileList&=$Path&'\'&$file&@CRLF
- EndIf
- WEnd
- FileClose($s)
- Return $FileList
- EndFunc
- ; поиск по маске
- Func __FileSearchAll($Path, $Mask, $Level, $LD=0)
- Local $FileList='', $file, $s = FileFindFirstFile($Path&'\'&$Mask)
- If $s = -1 Then Return ''
- While 1
- $file = FileFindNextFile($s)
- If @error Then ExitLoop
- If @extended Then
- If $LD>=$Level Then ContinueLoop
- $LD+=1
- $FileList&=__FileSearchAll($Path&'\'&$file, $Mask, $Level, $LD)
- $LD-=1
- Else
- $FileList&=$Path&'\'&$file&@CRLF
- EndIf
- WEnd
- FileClose($s)
- Return $FileList
- EndFunc
Add Comment
Please, Sign In to add comment