\system\test.dllra4o сказал(а):Список в каком виде ? Пример дайте.
Придётся гадать... Список -это обычный текстовый файл, где каждый файл в новой строке, так-же , учитывая , что Вы скрипт будете запускать из той папки, в которой будут удаляться файлы, то значение имеет только имя файла, например для Вашего примера файл "test.dll" попадёт в исключения и удаляться не будет. Верно ? Так-же, что-бы исключить лишние диалоги выбора файла списка он (список) должен иметь какое-то узнаваемое имя...Как то так
#include <Array.au3>
#include <File.au3>
Local $ListFile = 'Список.txt';Имя файла исключений
If FileExists(@ScriptDir & '\' & $ListFile) Then
;Чтение имён файлов исключений в массив
Local $aFiles = FileReadToArray(@ScriptDir & '\' & $ListFile)
;Оставляем в массиве только имя файла без пути
For $i = 0 To UBound($aFiles) - 1
$aFiles[$i] = StringRegExpReplace($aFiles[$i], '^.*\\', '')
Next
;Получение в массив всех файлов в папке со скриптом
Local $aAllFiles = _FileListToArray(@ScriptDir)
;перебор всех файлов в папке со скриптом и если файла нет в массиве исключений и это не сам файл с исключениями и не файл скрипта, то удаляем этот файл
For $j = 1 To $aAllFiles[0]
If _ArraySearch($aFiles, $aAllFiles[$j]) < 0 And $aAllFiles[$j] <> $ListFile And $aAllFiles[$j] <> @ScriptName Then
;Определение атрибута файла (файл или папка)
If StringInStr(FileGetAttrib($aAllFiles[$j]), 'D') Then
DirRemove(@ScriptDir & '\' & $aAllFiles[$j],1);Удаление папки
Else
FileDelete(@ScriptDir & '\' & $aAllFiles[$j]);Удаление файла
EndIf
EndIf
Next
Else
MsgBox(48, 'Ошибка !', 'Не найден файл списка исключений !', 3)
EndIf
тогда нужно записывать полный путь к файлу, ведь папка систем может быть где угодноНо ведь если test.dll будет не в папке систем его тоже хотелось бы удалить
Можно, по-этому я сразу и просилможно записать список в скрипт?
что-бы не гадать.Список в каком виде ? Пример дайте.
#include <Array.au3>
#include <File.au3>
;Массив исключений
Local $aFiles[3] = [@ScriptDir & '\BackUp', @ScriptDir & '\AutoIt v3 Script.au3', @ScriptDir & '\C_USER0.DAT']
;Получение в массив всех файлов в папке со скриптом
Local $aAllFiles = _FileListToArray(@ScriptDir)
;перебор всех файлов в папке со скриптом и если файла нет в массиве исключений и это не сам файл скрипта, то удаляем этот файл
For $j = 1 To $aAllFiles[0]
If _ArraySearch($aFiles, @ScriptDir & '\' & $aAllFiles[$j]) < 0 And $aAllFiles[$j] <> @ScriptName Then
;Определение атрибута файла (файл или папка)
If StringInStr(FileGetAttrib($aAllFiles[$j]), 'D') Then
DirRemove(@ScriptDir & '\' & $aAllFiles[$j], 1);Удаление папки
Else
FileDelete(@ScriptDir & '\' & $aAllFiles[$j]);Удаление файла
EndIf
EndIf
Next
_FSD('Полный путь к папке', 'имя папки|имя файла с расширением', 1)
; Параметры...............: $sPath - Путь поиска(строка)
; $sExt - Имя и расширение|имя папки. Пишем только имена без путей. разделяем знаком |
; $iDepth - Глубина поиска(число)
; |0 - Поиск во всех папках
; |1 - Поиск на первом уровне
Func _FSD($sPath, $sExt = '', $iDepth = 0)
$sPath = StringStripWS($sPath, 3)
$iDepth = Number($iDepth)
If StringCompare(StringRight($sPath, 1), '\') Then $sPath = $sPath & '\'
Local $sFileList
__FSD($sFileList, $sPath, $iDepth)
If @error Then Return SetError(1)
$sFileList = StringTrimRight($sFileList, 1)
If Not $sFileList Then Return SetError(2)
$sFileList = StringSplit($sFileList, '|', 1)
Local $sDelim = StringSplit($sExt, '|', 1)
Local $gn
For $o = 1 To $sDelim[0]
For $i = 1 To $sFileList[0]
$gn = StringRegExpReplace($sFileList[$i], '.*\\', '')
If Not StringCompare($sDelim[$o], $gn) Then $sFileList[$i] = ''
Next
Next
For $i = 1 To $sFileList[0]
If $sFileList[$i] Then
If Not FileDelete($sFileList[$i]) Then DirRemove($sFileList[$i], 1)
EndIf
Next
EndFunc ;==>_FSD
Func __FSD(ByRef $sFileList, $sPath, $iDepth = 0)
Local $sFile = '', $hFirstFile = FileFindFirstFile($sPath & '*')
If $hFirstFile = -1 Then Return SetError(1)
While 1
$sFile = FileFindNextFile($hFirstFile)
If @error Then ExitLoop
If @extended Then
$sFileList &= $sPath & $sFile & '|'
If Not $iDepth Then __FSD($sFileList, $sPath & $sFile & '\', $iDepth)
Else
$sFileList &= $sPath & $sFile & '|'
EndIf
WEnd
FileClose($hFirstFile)
EndFunc ;==>__FSD
Спасибо всем за помощь вариант от ra4o прекрасно работает))ra4o сказал(а):Не обязательно относительно расположения скрипта, может быть путь , например "C:\Windows\Temp" итп
Мне не нужно конкретные пути, важно понять что там должно быть, формат записи. Свои пути уже вставите в скрипт сами.
Вот вариант без дополнительного файла списка:
Код:#include <Array.au3> #include <File.au3> ;Массив исключений Local $aFiles[3] = [@ScriptDir & '\BackUp', @ScriptDir & '\AutoIt v3 Script.au3', @ScriptDir & '\C_USER0.DAT'] ;Получение в массив всех файлов в папке со скриптом Local $aAllFiles = _FileListToArray(@ScriptDir) ;перебор всех файлов в папке со скриптом и если файла нет в массиве исключений и это не сам файл скрипта, то удаляем этот файл For $j = 1 To $aAllFiles[0] If _ArraySearch($aFiles, @ScriptDir & '\' & $aAllFiles[$j]) < 0 And $aAllFiles[$j] <> @ScriptName Then ;Определение атрибута файла (файл или папка) If StringInStr(FileGetAttrib($aAllFiles[$j]), 'D') Then DirRemove(@ScriptDir & '\' & $aAllFiles[$j], 1);Удаление папки Else FileDelete(@ScriptDir & '\' & $aAllFiles[$j]);Удаление файла EndIf EndIf Next
Почитайте темуTempo сказал(а):... не возвращает того что находиться в подкаталогах
Tempoне возвращает того что находиться в подкаталогах проверяемого каталога поэтому я сделал проверку каждого подкаталога отдельно вроде работает))
_FileListToArrayRec
Нет, не возвращает.не возвращает того что находиться в подкаталогах проверяемого каталога
$aAllFiles = _FileListToArray(@ScriptDir)