Как выбрать последний файл из папки?

Статус
В этой теме нельзя размещать новые ответы.

dog2025

Новичок
Автор темы
7
1
Скрины sa-mp-000, sa-mp-001 и т.д Из них последний скрин нужно перемещать в другую папку.
Пример что нужно в итоги: Сделал скрин, нажал Alt+1 и скрин поместился в папку "Доклады", нажал Alt+2 в папку "Аресты"

Главное что бы в переменную помещалась число скрина или название полностью
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,468
https://autohotkey.com/docs/commands/LoopFile.htm
Вот здесь описано, хоть и на английском.
По этой инфе можно сделать такой алгоритм:
  1. Просматриваем все файлы(через цикл как в примере на той же странице);
  2. Узнаем дату создания/модификация с помощью переменных A_LoopFileTimeCreated/A_LoopFileTimeModified;
  3. Сравниваем: либо текущее время(не есть надежно), либо запоминаем и сравниваем с предыдущим старым файлом. Если подходит по условиям, то продолжаем искать(далее может быть скрин посвежее);
  4. Повторяем пункт 3 до того, пока не кончатся файлы в папке;
  5. Если файл найден(а то папка может быть и пуста), то копируем его туда, куда надо.
Всё это теоретически, клепать я скрипт не буду. В ентернете много инфы по этому поводу, если нужно - сделаешь сам.

UPD: посмотрев ещё чуть-чуть, я увидел, что есть сортировка. С ней будет легче, наверно.
 
  • Нравится
Реакции: DarkP1xel и FYP

dog2025

Новичок
Автор темы
7
1
https://autohotkey.com/docs/commands/LoopFile.htm
Вот здесь описано, хоть и на английском.
По этой инфе можно сделать такой алгоритм:

  1. Просматриваем все файлы(через цикл как в примере на той же странице);
    Узнаем дату создания/модификация с помощью переменных A_LoopFileTimeCreated/A_LoopFileTimeModified;
    Сравниваем: либо текущее время(не есть надежно), либо запоминаем и сравниваем с предыдущим старым файлом. Если подходит по условиям, то продолжаем искать(далее может быть скрин посвежее);
    Повторяем пункт 3 до того, пока не кончатся файлы в папке;
    Если файл найден(а то папка может быть и пуста), то копируем его туда, куда надо.
Всё это теоретически, клепать я скрипт не буду. В ентернете много инфы по этому поводу, если нужно - сделаешь сам.

UPD: посмотрев ещё чуть-чуть, я увидел, что есть сортировка. С ней будет легче, наверно.
Есть вот такая фигня, но она не работает, как это починить?
Можно будет сравнить по названию, там же по номерам.
Правда как сравнить тоже не представляю, точнее как взять 2 переменные, сравнить, потом одниу из них сравнивать с другой и т.д.
Код:
!1::
Loop, Files,%A_MyDocuments%\GTA San Andreas User Files\SAMP\screens, R
RegExMatch(A_LoopFileName, "sa-mp-(.*)", Sub)
MsgBox, %Sub%
return
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,468
Я лично хз что это и как это. Синтаксис не самый лучший.
Мне подсказывает, что ты делаешь неправильно. Там(по моему) нет поддержи Regex(в этой функции). Я чуть изменил пример 4:
Код:
; Example #4: Retrieve file names sorted by modification date:
FileList = ; Инициализируем переменную для того, чтобы записать в неё список файлов
Loop, Files, %A_MyDocuments%\GTA San Andreas User Files\SAMP\screens\*.png
{
    FileList = %FileList%%A_LoopFileTimeModified%`t%A_LoopFileName%`n ; Здесь мы делаем список файлов в папке(в формате "ДАТА<tab>ИМЯ_ФАЙЛА<newline>")
}

Sort, FileList, R  ; Сортировка(я так и не понял, как она работает. Вроде понятно, а вроде и нет)
Loop, Parse, FileList, `n ; Парсим строку, откидывая <newline>
{
    if A_LoopField =  ; Это внутреняя переменная, которая объявляется только во время работы это функции(подробнее здесь: https://autohotkey.com/docs/commands/LoopParse.htm)
        continue

    ; Здесь короче будет самый новый файл(по дате модификации)
    ; Можешь сразу получить имя для того, чтобы переместить и сделать break, чтобы закончить цикл
    StringSplit, FileItem, A_LoopField, %A_Tab%  ; Split into two parts at the tab char.
    FormatTime, TimeString, %FileItem1%, dd.MM.yy HH:mm ; форматируем время модификации в дату ДД.ММ.ГГ ЧЧ:ММ
    MsgBox, 4,, Модифицированный файл от %TimeString%:`n%FileItem2%`n`nПродолжить?
    IfMsgBox, No
        break
}
Почему вы так мучаетесь, я не понимаю.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.