Автор Тема: [Файловая система] Удаление файлов по маске, дате и количеству файлов  (Прочитано 2960 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн NinjaScript [?]

  • Новичок
  • *
  • Сообщений: 3
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.12.0
День добрый.  :)

Использую AutoIt v 3.4.1

Имеется на bat скрипт, суть такова:
Находит файлы по маске (определенного слова имени и с определенным расширением) и удаляет старые, оставляя n последних файлов. После чего переименовывает расширение оставшихся файлов.
Заданные значения (размещение папки, в которой происходит поиск файлов; имя и расширение файла, по которым идет поиск; количество файлов, которые нужно оставить; конечное расширение) задаются параметрами при вызове bat файла.

Полученный батник был переконвертирован сторонними программами в exe, и тут возникали проблемы:
  • скрипт не работает после конвертации
  • на скрипт жалуются антивирусы (как позднее оказалось некоторые конвертаторы и вправду дописывали свой код в exe-шник

Необходимо осуществить то же самое в Autoit (с последующей конвертацией в exe). Серфинг интернетов показал, что прямой конвертации из bat в autoIt не имеется. Возможен вызов cmd команд, но, насколько я понял, только одиночных, что в моем случае не помогает.

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


Оффлайн WSWR [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 935
  • Репутация: 352
    • Награды
  • Версия AutoIt: 3.3.14.0
NinjaScript

Например, переделанный скрипт удаления старых папок:
(нажмите для показа/скрытия)

Удаляет файлы, оставляя 50 новейших


Еще можно посмотреть эту библиотеку для создания списка файлов:
http://autoit-script.ru/index.php?topic=14598.0

Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7790
  • Репутация: 2317
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
OffTopicNinjaScript  [?]
Цитировать
Использую AutoIt v 3.4.1
Поделитесь, а то у меня нет такой. :)

Оффлайн alex33 [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1419
  • Репутация: 177
  • Пол: Мужской
    • alekssamos ВКонтакте
    • Награды
  • Версия AutoIt: 3.3.12.0
NinjaScript  [?]
Цитировать
Возможен вызов cmd команд, но, насколько я понял, только одиночных
Да почему... Я вон пробовал через && объединять команды, и ничего, работает :)
Например:
(нажмите для показа/скрытия)

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


Оффлайн NinjaScript [?]

  • Новичок
  • *
  • Сообщений: 3

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.12.0
WSWR, спасибо за ответ.
NinjaScript
Например, переделанный скрипт удаления старых папок
Я просматривал несколько подобных топиков.
В моем случае интересна реализация получения значений вводом параметров. Можно ли осуществить такое в autout? Чтобы я запускал скрипт (а в будущем exe), например, через командную строку, с параметрами. То есть в cmd.exe прописывал:
autoit.au3 d:\test\ full 7z 2 test И у меня запускался скрипт autoit.au3, который считывал введенные параметры (которые обрабатываются в теле скрипта). То есть с параметрами введенными выше, скрипт бы осуществлял поиск в папке "d:\test\" файлов в имени которых есть слово "full" с расширением "7z", оставлял бы последние 2 файла, остальные удалял, а расширение этих двух файлов переименовывал в "test".
(нажмите для показа/скрытия)

alex33
NinjaScript  [?]
Цитировать
Возможен вызов cmd команд, но, насколько я понял, только одиночных
Да почему... Я вон пробовал через && объединять команды, и ничего, работает :)
Спасибо! О такой возможности не знал. В теории это позволит "конвертировать" любой батник в autoit, если переписывать так каждую команду?

OffTopicmadmasles
OffTopicNinjaScript  [?]
Цитировать
Использую AutoIt v 3.4.1
Поделитесь, а то у меня нет такой. :)
У меня ВИП-аккаунт очепятался  :). v 3.3.12.0

Оффлайн alex33 [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1419
  • Репутация: 177
  • Пол: Мужской
    • alekssamos ВКонтакте
    • Награды
  • Версия AutoIt: 3.3.12.0
NinjaScript  [?]
Цитировать
Можно ли осуществить такое в autout? Чтобы я запускал скрипт (а в будущем exe), например, через командную строку, с параметрами.
Да, такое возможно. СМ. справку Параметры командной строки (CMD).

NinjaScript  [?]
Цитировать
В теории это позволит "конвертировать" любой батник в autoit, если переписывать так каждую команду?
Ну да.

Оффлайн NinjaScript [?]

  • Новичок
  • *
  • Сообщений: 3

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.12.0
Собственно, закончил работу над скриптом.

Его суть: находит файлы по маске (определенного слова имени и с определенным расширением) и удаляет старые, оставляя n последних файлов. Переименовывает расширение оставшихся файлов.
Заданные значения (размещение папки, в которой происходит поиск файлов; имя и расширение файла, по которым идет поиск; количество файлов, которые нужно оставить; конечное расширение) задаются параметрами при вызове скрипта или скомпилированного exe. При этом, если параметры не заданы, использует значения, заданные по умолчанию. Если требуется задать один или несколько параметров, остальные параметры можно обозначить символом "@", в таком случае они останутся заданными по умолчанию.

В конечном, работающем виде он выглядит так:

Код: AutoIt [Выделить]
#include <Array.au3>
#include <File.au3>
;объявление задаваемых значений переменных по умолчанию
$Dest='d:\temp\' ; Путь, где хранятся файлы
$Name='*full*' ; Слово, содержащиеся в имени файлов
$Number= 3 ; Количество файлов, которые останутся после удаления
$Ext_first='7z' ; начальное расширение
$Ext_final='kek' ; конечное расширение
;объявление незадаваемых переменных
$Mask=$Name&'.'&$Ext_final

;Условие, определяющее, перейти сразу к функции сортировки-удаления-переименования (если параметры не заданы), или выполнить функцию
;присваивания переменным значений параметров
If $CmdLine[0]=0 Then
   sort_del_ren()
   Else
   havepar()
Endif

;Функция, выполняемая, если параметры для скрипта заданы.
;Если, параметр задан, присваивает переменной значение параметра,
;в противном случае пропускает переменную и проверяет следующую, по тому же принципу.
;После, запускает функцию сортировки-удаления-переименования
Func havepar()
    If Not ($CmdLine[1]=='@') Then
      Global $Dest=$CmdLine[1]
   EndIf

   If Not ($CmdLine[2]=='@') Then
      Global $Name=$CmdLine[2]
   EndIf

   If Not ($CmdLine[3]=='@') Then
      Global $Number=$CmdLine[3]
   EndIf

   If Not ($CmdLine[4]=='@') Then
      Global $Ext_first=$CmdLine[4]
   EndIf

   If Not ($CmdLine[5]=='@') Then
      Global $Ext_final=$CmdLine[5]
     EndIf
   $Mask=$Name&'.'&$Ext_final ;необходимо переобъявление маски, если параметры заданы
   sort_del_ren()
EndFunc

;Функция сортировки-удаления-переименования
Func sort_del_ren()
   FileMove($Dest &'*.'& $Ext_first, $Dest &'*.'& $Ext_final) ;переимнование расширений файлов

   ;построение из списка файлов, найденных по маске, двухмерного массива со столбцами (имя, дата)
   Local $aFileColList = _FileListToArray($dest, $Mask, 1, True) ;(0 - файлы и папки, 1 - файлы, 2 - папки)
   if $aFileColList = 0 Then
   Return
   Else
   Local $aFileColList_2D[ $aFileColList[0]+1 ][2] = [[ $aFileColList[0] ]]
   For $i = 1 To $aFileColList[0]
   $aFileColList_2D[$i][0] = $aFileColList[$i]
   $aFileColList_2D[$i][1] = FileGetTime($aFileColList[$i], 0, 1) ;option 0 = (по умолчанию) время последней модификации )1 = время создания 2 = время последнего доступа
   ;в каком виде необходимо получить информацию 0 = (по умолчанию) вернуть массив, 1 = вернуть строку вида ГГГГММДДЧЧММСС
   Next
   ;сортировка и удаление лишних старых файлов
   $aFileColList = 0
   _ArraySort($aFileColList_2D, 1, 1, 0, 1) ;сортировка массива (1 - по убыванию, 1 - Индекс массива, от которого начинать сортировку, 0 - Индекс массива, в котором закончить сортировку, 1 - Индекс колонки, по которой сортировать в двумерном массиве)
   $UB = UBound($aFileColList_2D) - 1
   For $i = $Number + 1 To $UB
   FileRecycle($aFileColList_2D[$i][0])
   Next
   EndIf
   EndFunc


Огромное спасибо всем откликнувшимся  :)

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


 

Похожие темы

  Тема / Автор Ответов Последний ответ
10 Ответов
5121 Просмотров
Последний ответ Июль 12, 2010, 18:27:35
от dwerf
3 Ответов
6511 Просмотров
Последний ответ Май 11, 2011, 18:30:00
от madmasles
13 Ответов
5644 Просмотров
Последний ответ Июль 19, 2011, 23:56:15
от CreatoR
2 Ответов
2477 Просмотров
Последний ответ Октябрь 03, 2011, 10:45:46
от ZaEzzz
15 Ответов
5498 Просмотров
Последний ответ Январь 07, 2015, 20:12:36
от fedoroff
7 Ответов
2149 Просмотров
Последний ответ Июнь 28, 2016, 15:53:38
от MnM
8 Ответов
910 Просмотров
Последний ответ Ноябрь 22, 2017, 15:49:31
от Oleg-lamer
1 Ответов
345 Просмотров
Последний ответ Июль 11, 2018, 18:20:59
от InnI
1 Ответов
119 Просмотров
Последний ответ Июль 22, 2018, 13:45:45
от sngr
3 Ответов
175 Просмотров
Последний ответ Август 12, 2018, 18:27:54
от Alofa