Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


VelDmi
amel27 как то написал функцию возвращающую массив дерева каталогов включая подкаталоги, с её помощью эту задачу реализовать довольно просто:

Код: Выделить весь код
#include <Array.au3>
#include <File.au3>

;Создаём нужные переменные и массив для содержания списка файлов которые удалять не нужно
$Dir = "CutDir"
$ExcludeListFile = "file.txt"
Dim $ExcludeListArr[1]

;Получаем массив структуры каталогов в папке "CutDir" (из переменной $Dir)
$DirsArray =  _DirListToArray($Dir)

;Получаем массив со списком файлов которые не нужно удалять (из файл от переменной $ExcludeListFile)..
_FileReadToArray($ExcludeListFile, $ExcludeListArr)

;Проходим по массиву структуры каталогов, получаем массив со списком файлов в каждом каталоге, и удаляем файлы не находящиеся в списке.
For $i = 1 To UBound($DirsArray)-1
    ;Получаем массив со списком файлов текущего каталога...
    $InDirFilesArr = _FileListToArray($DirsArray[$i], "*.*", 1)

        ;Если в текущем каталоге найдены файлы, то проходимся по массиву и ищем текущий элемент в массиве списка исключенных файлов.
    If IsArray($InDirFilesArr) Then
        For $iF = 1 To UBound($InDirFilesArr)-1
            ;Поиск элемента (текущего файла включая полный путь)...
            $SearchInArr = _ArraySearch($ExcludeListArr, $DirsArray[$i] & "\" & $InDirFilesArr[$iF])
            ;Если не найден, то удаляем файл...
            If $SearchInArr = -1 Then FileDelete($DirsArray[$i] & "\" & $InDirFilesArr[$iF])
        Next
    EndIf
Next

;Функция возвращает массив структуры подкаталогов
Func _DirListToArray ($sPath)
    Local $i, $j, $rlist[1]=[0], $blist, $alist=_FileListToArray ($sPath, '*', 2)
    If IsArray ($alist) Then
        For $i=1 To $alist [0]
            _ArrayAdd ($rlist, $sPath & "\" & $alist [$i])
            $blist = _DirListToArray ($sPath & "\" & $alist [$i])
            If $blist[0]>0 Then
                For $j=1 To $blist [0]
                    _ArrayAdd ($rlist, $blist [$j])
                Next
            EndIf
        Next
    EndIf
    $rlist [0] = UBound ($rlist) - 1
    Return $rlist
EndFunc
P.S
Я не тестировал скрипт, написал на скорую руку.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 21:46, 17-05-2007 | #408