Цитата socap:
AZJIO, а можно ли сделать маску исключения файлов по папкам? »
|
Можно, но не экономично получается, то есть заведомо тормозить выполнение сценария.
Например если добавить проверку в каждый запрос, то проверяется набор символов, при каждом запросе. Если сделать детект с помощью регулярного выражения, то скрипт будет обрабатывать этот каталог (холостой ход), потом вырезать ненужное. здесь специальную функцию лучше делать, дабы тем кому эта фича никогда не понадобилась не страдали.
Вообще такая UDF уже есть, смотри _RecFileListToArray в справке, по ссылке выше, но у неё недостаток в том, что она указывает папку, а не относительный путь к папке, то есть если указать в исключения 'папка1;папка2' то все эти папки будут игнорироваться, а обычно требуется исключить конкретную папку, а не одноимённые. И второй недостаток - используется с ключами $iReturn = 0 и $iRecur = 1, то есть возвращает папки и файлы.
Есть иной вариант
_PathSearch, просто взять из неё регулярное выражение и с помощью него вырезать из результатов ненужные папки, примерно так
Код:

#include <Array.au3> ; для _ArrayDisplay
#include <FileOperations.au3>
$FileList=_FO_FileSearch(@WindowsDir, 'exe|dll', True, 125, 0, 0, 0)
$FileList = _ExcludePaths($FileList, 'system32\*|Microsoft.NET\*|assembly\*|WinSxS\*|RegisteredPackages\*')
MsgBox(0, 'Сообщение', $FileList)
$FileList = StringSplit($FileList, @CRLF, 1)
_ArrayDisplay($FileList, UBound($FileList) & ' - RegExp')
; Получение списка и обработка регулярным выражением
Func _ExcludePaths($FileList, $Mask)
$Mask = StringReplace(StringReplace(StringRegExpReplace($Mask, '[][$^.{}()+\\]', '\\$0'), '?', '.'), '*', '.*?')
$FileList = StringRegExpReplace($FileList & @CRLF, '(?mi)^(' & $Mask & ')\r\n', '')
$FileList = StringReplace(StringTrimRight($FileList, 2), '|', '')
Return $FileList
EndFunc
Если в _FO_FileSearch вывод относительных путей, то и в маске функции _ExcludePaths указывать относительные пути. Если в _FO_FileSearch указать возврат полных путей, то и в _ExcludePaths указывать лучше полные. В любом случае лучше элемент маски завершать символами "\*" что исключит детект файлов. Это не экономичный вариант, исключаемая папка будет сканироваться.