NIKZZZZ
Gold Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору ; #Example# ********************************************************************************************************************* ;#cs ConsoleWrite("Лоиск всех файлов и каталогов" & @CRLF) $search = _FileFindFirstFile("c:\Program Files\Internet Explorer\*", 3) If $search = -1 Then ConsoleWrite("No files/directories matched the search pattern" & @CRLF) Exit EndIf While 1 $file = _FileFindNextFile($search) If @error Then ExitLoop ConsoleWrite("Find file - " & $file & @CRLF) WEnd _FileFindClose($search) ;#ce ;#cs ConsoleWrite("Лоиск .dll и .mui файлов c выводом полных путей" & @CRLF) $search = _FileFindFirstFile("c:\Program Files\Internet Explorer\\.*\.(?:dll|mui)", 13) If $search = -1 Then ConsoleWrite("No files/directories matched the search pattern" & @CRLF) Exit EndIf While 1 $file = _FileFindNextFile($search) If @error Then ExitLoop ConsoleWrite("Find file - " & $file & @CRLF) WEnd _FileFindClose($search) ;#ce ;******************************************************************************************************************************** ; #INDEX# ======================================================================================================================= ; Title .........: FileFind ; AutoIt Version : 3.2.3++ ; Language ......: Русский ; Description ...: Поиск файлов, включая подкаталоги, синтаксис и возвращаемое значение в основном совпадают с FileFindFirstFile() ; и FileFindNextFile() ; в _FileFindFirstFile("filename" [,flag][,MaxLevel]) добавлены необязатенльные параметры ; flag=1 - поиск файлов ; flag=2 - поиск каталогов ; flag=4 - поиск по иаске регулярного выражения (перед именем файла "\" должжна удваиваться) ; flag=8 - _FileFindNextFile выводит полный путь, вместо относительного, по умолчанию flag=3 ; MaxLevel - максимальный уровень вложенности подкаталоглв, по умолчанию MaxLevel=9999 ; Author(s) .....: Nikzzzz ; =============================================================================================================================== Func _FileFindFirstFile($sFile, $iMode = 3, $iLevels = 9999) Local $avStack[6] $avStack[0] = 4 $avStack[2] = $iMode $avStack[3] = $iLevels If Not BitAND($iMode, 4) Then $avStack[1] = StringMid($sFile, StringInStr($sFile, "\", 0, -1) + 1) $avStack[1] = StringRegExpReplace($avStack[1], "[\\\(\)\{\}\+\$\.]", "\\\0") $avStack[1] = StringReplace($avStack[1], "*", ".*") $avStack[1] = StringReplace($avStack[1], "?", ".") $avStack[4] = StringLeft($sFile, StringInStr($sFile, "\", 0, -1) - 1) Else $avStack[1] = StringMid($sFile, StringInStr($sFile, "\\", 0, -1) + 2) $avStack[4] = StringLeft($sFile, StringInStr($sFile, "\\", 0, -1) - 1) EndIf $avStack[5] = FileFindFirstFile($avStack[4] & "\*.*") If $avStack[5] = -1 Then SetError(1) Return -1 EndIf Return $avStack EndFunc ;==>_FileFindFirstFile Func _FileFindNextFile(ByRef $avStack) Local $sFindFile, $sFindFileFulName While 1 $sFindFile = FileFindNextFile($avStack[$avStack[0] + 1]) If Not @error Then If @extended Then $sFindFileFulName = $avStack[$avStack[0]] & "\" & $sFindFile If ($avStack[0] - 4) / 2 < $avStack[3] Then $avStack[0] += 2 ReDim $avStack[$avStack[0] + 2] $avStack[$avStack[0]] = $sFindFileFulName $avStack[$avStack[0] + 1] = FileFindFirstFile($avStack[$avStack[0]] & "\*.*") EndIf If StringRegExpReplace($sFindFile, "(?i)" & $avStack[1], "", 1) = "" And BitAND($avStack[2], 2) Then If BitAND($avStack[2], 8) Then Return $sFindFileFulName Else Return StringMid($sFindFileFulName, StringLen($avStack[4]) + 2) EndIf EndIf ContinueLoop Else If StringRegExpReplace($sFindFile, "(?i)" & $avStack[1], "", 1) = "" And BitAND($avStack[2], 1) Then If BitAND($avStack[2], 8) Then Return $avStack[$avStack[0]] & "\" & $sFindFile Else Return StringMid($avStack[$avStack[0]] & "\" & $sFindFile, StringLen($avStack[4]) + 2) EndIf EndIf ContinueLoop EndIf Else If $avStack[0] = 4 Then SetError(-1) Return "" Else FileClose($avStack[$avStack[0] + 1]) $avStack[0] -= 2 ReDim $avStack[$avStack[0] + 2] EndIf EndIf WEnd EndFunc ;==>_FileFindNextFile Func _FileFindClose(ByRef $avStack) Local $iRetVaue While $avStack[0] >= 4 $iRetVaue = FileClose($avStack[$avStack[0] + 1]) $avStack[0] -= 2 WEnd ReDim $avStack[1] Return $iRetVaue EndFunc ;==>_FileFindClose | Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 20:11 28-09-2014 | Исправлено: NIKZZZZ, 08:19 29-09-2014 |
|