Умное переименование составных имён файлов\папок

Если вы хотите поделиться с другими пользователями секретами Total Commander, знаете интересные опции, приемы, настройки, то вам сюда.

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

Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Умное переименование составных имён файлов\папок

Сообщение Andrey_A »

Недавно столкнулся с такой задачей - переименование файлов типа
datatimegettimezoneinfo... должно было получаться DataTimeGetTimeZoneInfo - пытался обычными способами в групповом переименовании в окошках найти\заменить прописывать, но строка ограничена 1024 символоми, а нужных замен оказалось многовато. Было много всяких попыток, пока случайно не наткнулся на плагин Translit, хотя он для кодировок, но в этой задаче тоже справился на ура. Может это и не секрет, но я думаю, что кому-то это поможет решить не только эту задачу.
В файле ReName.ttb в секции [Symbols] прописывается
data=Data
time=Time
get=Get
zone=Zone
info=Info
...
в инструменте группового переименования вызывается плагин и этот файл. В расширении можно указать [L][E1][n][E2-] и всё!
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Интересный способ решения проблемы. Да, иногда бывает желание переименовать файлы, чтобы дать им красивые имена, не изменяя их с точностью до регистра символов.
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Эх, прикрутить бы еще к этому делу словарик какой, чтобы сам слова отделял :roll:
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Samwatas
Сообщения: 95
Зарегистрирован: Сб сен 12, 2009 20:26

Сообщение Samwatas »

Вахмурка писал(а):Эх, прикрутить бы еще к этому делу словарик какой, чтобы сам слова отделял :roll:
А что мешает регэкспами Букву в Верхнем Регистре заменить на пробел плюс эту же букву.
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Samwatas писал(а):А что мешает регэкспами Букву в Верхнем Регистре заменить на пробел плюс эту же букву
Мешает сущая мелочь - постановка задачи:
переименование файлов типа datatimegettimezoneinfo
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Samwatas
Сообщения: 95
Зарегистрирован: Сб сен 12, 2009 20:26

Сообщение Samwatas »

Я просто неправильно понял. Я думал, что после переименования в DataTimeGetTimeZoneInfo нужно разделить слова пробелами.
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Эх, прикрутить бы еще к этому делу словарик
В задаче которая была у меня файлов было немного. Задался целью внести в файлик распространённые замены (file=File, list=List) - вручную прописывать ну уж больно долго. Помогите пожалуйста.
Я вывожу список имён файлов в редактор. Т.к. ряд файлов уже имеют встроенные имена начинающиеся с верхнего регистра, то необходимо их вытащить
1. Как сделать так (наверно с помощью рег.выраж.), чтобы остались только те имена, которые в середине имеют хотя бы один символ в верхнем регистре и , т.е. из имён

LogViewer
Icons
TotalCom
colors

должны остаться только LogViewer и TotalCom

2. и после этого отделить друг от друга, должно получиться
Log
Viewer
Total
Com
Samwatas
Сообщения: 95
Зарегистрирован: Сб сен 12, 2009 20:26

Сообщение Samwatas »

Я бы на вашем месте начинал бы учить какой-нибудь скриптовый язык (Автоит - это самый подходящий вариант, на мой взгляд). Поскольку у вас часто возникают задачи, которые требуют написания скриптов, то знания того же Автоита (или другого языка) ускорило бы решение таких задач (то есть вместо ожидания решения на форуме, можно быстрее решить самому).
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Для начала бы выучить regex. Итак, всё делалось в EmEditor.

Для удаления строчек, которые не содержат больших букв, делаем замену (?-i)^[^A-Z]*$(\r\n)? на пустую строку. При этом будет удален и разрыв строки после каждой строкой без больших букв, если он там есть.

Заменяем (?-i)([A-Z]+) на \L\r\n\1 - так мы найдем все последовательности из больших букв, перенесем их на новую строку и заменим их на маленькие (почему-то без знака + после [A-Z] у меня EmEditor отказался правильно выполнять замену; в принципе можно вместо + написать {1} - тогда каждая большая буква будет на новую строчку переноситься и становиться маленькой). В результате ты получишь:

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

log
viewer
icons
total
com
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Andrey_A писал(а):1. Как сделать так (наверно с помощью рег.выраж.), чтобы остались только те имена, которые в середине имеют хотя бы один символ в верхнем регистре и , т.е. из имён
LogViewer
Icons
TotalCom
colors
должны остаться только LogViewer и TotalCom

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

sed -n /[A-Z].*[A-Z]/p list.txt > 2_Up.txt
Andrey_A писал(а):2. и после этого отделить друг от друга, должно получиться
Log
Viewer
Total
Com

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

sed -r -n s/([A-Z][a-z]*)/\1\n/p 2_Up.txt > split.txt
проверено на данных примерах с GNU sed version 4.2
и super-sed version 3.62 based on GNU sed version 4.1
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Samwatas писал(а):Я бы на вашем месте начинал бы учить какой-нибудь скриптовый язык
Я бы на вашем месте научился внимательно читать, и давать информацию, помогающую решению задачи, и не заниматься нравоучениями. Если бы все всё знали, то можно было бы закрывать форум.

Что касается темы. Спасибо за дельные советы - помогло. Столкнулся с проблемой ограничения секции - примерно 28588 символов.
Для корректного распознавания приходится писать дважды одно и тоже имя, т.к. есть уже такие имена в файлах:
file=File
File=File
поэтому файл увеличился. И ещё прописывать надо сначала длинные имена, затем короткие.
Об ограничении сообщил автору в личку, а там посмотрим
Но факт, что плагин работает отлично при том что в файле примерно 2700
строк с поиском и заменой. Почти не тормозит. Поэтому ждем ответа - конечно было бы отлично подключить словарик из часто употребляемых имён в файлах
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

А если разбить общее множество слов на несколько ttb-файлов, чтоб каждый содержал часть слов (например, по 2700 строк), и потом в мультипереименователе просто применить таблицы одну за другой? Тогда все слова, содержащиеся во всех таблицах, будут обработаны - специфика задачи такова, что они друг другу мешать не будут. Да, это требует чуть больше действий, зато результат будет уже сейчас.
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

применить таблицы одну за другой
Это я пробовал ещё вчера - просто получается удвоение имени и каждый файл переименовывает своё

[=translit.(USR) ReName_1][=translit.(USR) NameRe_2]

итогo:

ArhiveTArPlusArHiveTarPlUs.vbs

а файл был:

arhivetarplus.vbs

может я как-то не так прописатл
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Не так. Сделать несколько операций переименования. Вначале в качестве имени указать [=translit.(USR) ReName_1], переименовать файлы, затем загрузить только что переименованные файлы в переименователь (кнопочка с изогнутой стрелочкой слева от кнопки запуска переименования) и указать в качестве имени [=translit.(USR) ReName_2], и так для каждой таблицы.

Кстати, вижу, что есть проблемы, если одно слово является частью другого - например, слова Hive и Archive - тогда в результате получается ArcHive. Получается, в последней таблице нужна еще строка ArcHive=Archive, которая будет исправлять подобные артефакты.
fadetoback
Сообщения: 1
Зарегистрирован: Вс окт 31, 2010 17:21
Откуда: Kharkov, Ukraine

По умолчанию.

Сообщение fadetoback »

Скажите как сделать так, чтобы при открытии группового переименования файлов в ниспадающем списке выбора "Верхнего/нижнего регистра" переименования вместо "Без изменения", всегда при открытии было установлено "все строчные".
Ответить