У меня есть папка с файлами. Задача состоит в том, чтобы найти самые старые файлы или самые новые.
Первое решение, основано на примере команды StdoutRead()
с использованием команды DIR и нескольких параметров.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#include <AutoItConstants.au3> #include <MsgBoxConstants.au3> $sFilePath = "D:\Files" ; <= Путь до файлов. $sFilter = "*.xls" ; <= Маска поиска $sFilePath = StringRegExpReplace($sFilePath, "[\\/]+\z", "") & "\"" ; Чтобы отменить сортировку и, следовательно, получить самый старый файл, нужно переопределить параметр с /OD на /O-D ; Чтобы выполнить рекурсивный поиск во вложенных папках, добавьте параметр /S $iPID = Run(@ComSpec & ' /C DIR "' & $sFilePath & $sFilter & '" /B /OD /A-D', $sFilePath, @SW_HIDE, $STDOUT_CHILD) ; Сортировка По Возрастанию ProcessWaitClose($iPID) $sOutput = StdoutRead($iPID) $aArray = StringSplit(StringTrimRight(StringStripCR($sOutput), 1), @CRLF) If @error Then MsgBox($MB_ICONERROR + $MB_SYSTEMMODAL, "", "Файл не найден.") Else MsgBox($MB_SYSTEMMODAL, "Последний файл :", $aArray[$aArray[0]]) EndIf |
Другой вариант.
- Создаем список всех файлов с помощью функции _FileListToArray
- Добавляем к полученному списку колонку для сохранения даты изменения файла.
- Записываем в массив дату изменения каждого файла в формате YYYY MM DD HH MM SS, используя функцию FileGetTime
- Функция _ArraySort сортирует массив
- Далее можно удалить файлы которые были созданы более 100 часов назад.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <Array.au3> #include <File.au3> #include <FileConstants.au3> #include <Date.au3> Local $aArray = _FileListToArray(@DesktopDir, "*.*", $FLTA_FILES, True) _ArrayColInsert($aArray, 1);добавление столбца _ArrayDisplay($aArray) For $i = 1 To $aArray[0][0] $aArrayDate = FileGetTime($aArray[$i][0], $FT_MODIFIED, $FT_ARRAY );получаем дату изменения, функция возвращает массив в формате YYYY MM DD HH MM SS $aArray[$i][1] = _DateDiff("h", $aArrayDate[0] & "/" & $aArrayDate[1] & "/" & $aArrayDate[2] & " " & $aArrayDate[3] & ":" & $aArrayDate[4] & ":" & $aArrayDate[5],_NowCalc()) ; записывает в столбец 1 разницу между настоящим моментом и датой файла в часах ;можно рассчитать в час, секунду, день и т... см. справку Next _ArraySort($aArray,1,0,0,1) ;сортировка по столбцу 1 от старого до самого нового файла _ArrayDisplay($aArray) ;For $i = 1 To UBound($aArray) - 1 ;If $aArray[$i][1] > 100 Then FileDelete($aArray[$i][0]) ;Если файл создан более 100 часов назад, он удаляется (пример) ;Next |