Сортировка списка файлов по отдельным символам

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Ответить
sancher
Сообщения: 12
Зарегистрирован: Пт ноя 04, 2011 22:45
Откуда: Piter

Сортировка списка файлов по отдельным символам

Сообщение sancher »

Не нашёл подобных вопросов.
У меня файлы, на конце которых указан год.
То есть, например, файлы вида Название_2004, Название_2005,...
Задача: отсортировать все файлы по последним 4-м символам, то есть по году.
Буду благодарен за помощь.

[mod="Avada"]С учётом реального содержания тема перенесена из "Общих вопросв" в "Автоматизацию".[/mod]
Аватара пользователя
Volniy
Сообщения: 585
Зарегистрирован: Ср дек 15, 2004 00:17
Откуда: Местный

Сообщение Volniy »

Можно создать колонку в пользовательском наборе через Script Content Plugin. Навскидку:

Код: Выделить всё

'(c)Volniy, 2011


'Get last 4 digits 4 future sorting
'file12004.txt   -> 2004
'file22011.txt   -> 2011
'etc.

Dim fso, tmp
Set fso = CreateObject("Scripting.FileSystemObject")
tmp = LCase(fso.GetbaseName(filename))
content = Right(tmp,4)
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Для данного случая я бы предпочёл:
BaseNameRev.vbs:

Код: Выделить всё

BN = LCase(CreateObject("Scripting.FileSystemObject").GetBaseName(FileName))
i = InStrRev(BN, "_")
y = Mid(BN, i + 1)
If i > 0 And IsNumeric(y) Then content = y
Script.ini:

Код: Выделить всё

[Script]
Section=BaseNameRev

[BaseNameRev]
Script=BaseNameRev.vbs
Думаю, подобную возможность не помешало бы прикрутить к плагинам nicepaths, filemask, expander(2).
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

sancher писал(а):Задача: отсортировать все файлы по последним 4-м символам, то есть по году.
Как вариант: переименовать (с помощью инструмента группового переименования и регулярных выражений) файлы, перенеся/добавив год в начало имени. С помощью отката можно при необходимости вернуть прежние имена.
sancher
Сообщения: 12
Зарегистрирован: Пт ноя 04, 2011 22:45
Откуда: Piter

Сообщение sancher »

всем спасибо за помощь!

Добавлено спустя 41 минуту:

и всё-таки решил задать ещё один вопрос...
может пригодится не только мне
просто опыта работы с плагинами мало, поэтому сразу
ничего не вышло
установил плагин, создал BaseNameRev.vbs, поправил Script.ini
настроил набор колонок ([=script.Result])
и тишина...
стал копаться
так и не понял, как настроить, чтобы плагин работал при наличии нескольких скриптов, т. е. при наличии дефолтного ext.vbs и нового BaseNameRev.vbs
пришлось в Script.ini закомментить дефолтный скрипт
[Script]
Section=BaseNameRev
;Section=Extension

теперь BaseNameRev.vbs выводит результат в [=script.Result]
как заставить работать при наличии нескольких скриптов?
как плагин поймёт, из какого скрипта брать script.Result?
я сначала подумал, что нужно писать [=BaseNameRev.Result]
не вышло
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

sancher писал(а):как заставить работать при наличии нескольких скриптов?
Обсуждается в спецтеме.
Ответить