Русское сообщество AutoIt

Общий раздел по AutoIt => Стол заказов => Тема начата: SLameN от Июль 11, 2018, 16:45:11

Название: Поиск по маске и удаление не нужных файлов
Отправлено: SLameN от Июль 11, 2018, 16:45:11
Версия AutoIt: 3.5.4

Описание:
Привет! Помогите написать следующее:

Имеется папка, путь и название у нее не будет меняться. Внутри папки много файлов с таким названием - "name-2018-05-11-23-59.zip"

Необходимо удалять файлы по такому принципу:
Удалить все, кроме -
1. когда в названии присутствует 5 или 25 день в любом месяце, пример - "name-2018-06-05-15-59.zip" - его оставить не удалять
2. файлы за текущий месяц (согласно названию)


Примечания:
У меня даже просто не получается найти файлы по маске
Код: AutoIt [Выделить]
$sPath = 'D:\Base\'
$sMask = '_msi_keyfile*'

$aSearch = _FileSearch($sPath, $sMask, 1)

    For $i = 1 To $aSearch[0]
        FileDelete($aSearch[$i])
   Next
MsgBox(4096, "", "Ба-бах!!")
 

Название: Re: Поиск по маске и удаление не нужных файлов
Отправлено: InnI от Июль 11, 2018, 18:20:59
Сделал вывод файлов в консоль SciTE. Если всё правильно, то раскомментируйте нужный режим удаления самостоятельно ;)
И не забудьте сделать резервную копию
Код: AutoIt [Выделить]
#include <File.au3>

$sPath = "D:\Base\"

$aFiles = _FileListToArray($sPath, "*.zip", $FLTA_FILES)
If @error Then Exit MsgBox(0, "Error", "Ошибка поиска файлов: " & @error)

For $i = 0 To $aFiles[0]
  $aFind = StringRegExp($aFiles[$i], ".*?-\d{4}-(\d\d)-(\d\d)-\d\d-\d\d.zip", 3)
  If @error Then ContinueLoop
  If $aFind[0] = @MON Or $aFind[1] = "05" Or $aFind[1] = "25" Then ContinueLoop
  ConsoleWrite($sPath & $aFiles[$i] & @CRLF)
  ; FileRecycle($sPath & $aFiles[$i]) ; удаление в корзину
  ; FileDelete($sPath & $aFiles[$i]) ; полное удаление
Next