Групповое переименование

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

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

Iori
Сообщения: 552
Зарегистрирован: Ср апр 25, 2012 20:33

Сообщение Iori »

Flasher
А про 2 точки - с точки зрения логики и исходной задачи так и должно быть.
В принципе вы правы. Скрипт находит пробелы и знаки подчёркивания и меняет их на точки, просто две точки это не эстетично выглядит ;) Ну да ладно, такое редко встречается :)

Решил оставить параметер таким %WL (\s+) .
Работает и делает то что надо в 90% случаях, и пусть будут точки в скобках :D.

Спасибо вам за скрипт и за терпение.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Iori писал(а):просто две точки это не эстетично выглядит
Это как раз-таки не проблема для исходной задачи: %WL ([^\[\(])[_\s]+([^\]\)]) $1.$2
Т.к. тут действует исключение в скобках. А вот в один проход ещё и убирать пробелы рядом со скобками изнутри вряд ли возможно.
Либо надо для скрипта писать цикл с пределом на указанное число проходов. Это, в принципе, несложно. Тогда параметров будет вдвое больше указанного числа + 2.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Iori
Сообщения: 552
Зарегистрирован: Ср апр 25, 2012 20:33

Сообщение Iori »

Flasher

Спасибо :)
Не надо переделовать скрипт.
Всё отлично работает.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Iori писал(а):Плюс его можно под себя подгонять.
Скорее всего, подгоняться пользователем будут только параметры, а не сам скрипт.
В кнопке с вызовом ИГП, имя шаблона тоже не составляет труда поменять на другое.
А вот настраивать шаблон (в том числе с использованием регулярных выражений), по- моему, в диалоге ИГП удобнее, поскольку там сразу видно, что во что переименовывается, даже без необходимости выполнения самого переименования.
К тому же имеется функция отката и некоторые другие полезные мелочи.

Спору нет, возможность внесения изменений в содержимом одной кнопки (а не только в кнопке, но и в шаблонах ИГП, как в моём варианте), может стать для кого-то решающим фактором.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

sa писал(а):Скорее всего, подгоняться пользователем будут только параметры, а не сам скрипт.
Это и имелось в виду. Но и сам скрипт никто не мешает подгонять под себя. И пользователь здесь вполне конкретный, а не абстрактный.
sa писал(а):возможность внесения изменений в содержимом одной кнопки ... может стать для кого-то решающим фактором.
Фактора здесь как минимум два. И второй, где всё происходит без появления окна, ничуть не менее важен.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Кнопка для тех, кто пожелает обойтись одной кнопкой на TCFS2 без необходимости создания шаблона и стерпит появление окна диалога группового переименования:

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

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef "set_ini(`%COMMANDER_PATH%\usercmd.ini`, em_temp, cmd, `MULTIRENAME Несуществующее имя шаблона`) tem(em_temp) delay(500) send(`{TAB 2}`, findwnd(`TMultiRename`))
send(@`([^\[\(])[_\s]+([^\]\)])`, findwnd(`TMultiRename`)) send(`{TAB}`, findwnd(`TMultiRename`)) send(@`$1.$2`, findwnd(`TMultiRename`)) send(`{TAB 3} {Tab} {ENTER}`, findwnd(`TMultiRename`)) delay(500) send(`{ESC}`, findwnd(`TMultiRename`))"
WCMICONS.DLL,46
Групповое переименование: "Найти:" ([^\[\(])[_\s]+([^\]\)]) "Заменить на:" $1.$2 без "[E]" с "Рег. выраж."


-1

Flasher
Может, стоит в скрипте не добавлять признак дублирования (число в скобках) для элементов, что сохранили прежние имена после RegEx?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

sa
Стоит, уже думал про это, дополнил. Только это касается исключительно обрабатываемого в данный момент элемента. Узнать, что там что-то когда-то подвергалось правке с регекспами, нереально. Да и не вижу смысла этого касаться.

Название кнопки - не для слабонервных... Изображение
Честно говоря, не хотел обсуждать кнопку, но вот эти полусекундные задержки глаза откровенно мозолят. Сделал бы уж по-человечески через eval(send_wait(...
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Flasher писал(а):Только это касается исключительно обрабатываемого в данный момент элемента.
Само собой разумеется.
Flasher писал(а):Название кнопки - не для слабонервных...
Можно перенести его в строку "Путь запуска:" (для памяти), а в строке подсказки записать "Точки между словами, где пробелы и знаки подчёркивания" или что-то своё, более читабельное.
через eval(send_wait(
Ага, особенно актуально для ESC: начать дожидаться появления окна, когда оно уже давным-давно открыто. :D
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

sa писал(а):Можно перенести
Зачем это мне рассказывать?
sa писал(а):Ага, особенно актуально для ESC
Там вообще неясно, зачем эта задержка.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Flasher писал(а):ачем это мне рассказывать?
Чтоб другим пригодилось. Я же написал: "можно", а не "можешь".
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Ты же в ответ мне написал, а не рядом с кнопкой или в самом коде.
Ещё раз посмотрел на код и не уловил смысла в разделении отправки разных нажатий в одном окне. Изображение В итоге кнопка растянулась на полкилОметра.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Flasher писал(а):не уловил смысла в разделении отправки разных нажатий в одном окне
Думаю, работа кнопки заметно не изменится, но реализация объединения кучи функций send в одну интерес представляет. Делись!
SVM
Сообщения: 47
Зарегистрирован: Чт окт 16, 2008 16:36

Сообщение SVM »

В каждой папке есть файлы и файл с расширением md5 сделанный в Total Commander. В нём crc сумма *Новоё имя файла. Задача: посчитать crc суммы файлов и если сумма совпадает с суммой в md5 файле, то переименовать файлы в новые имена, которые есть в md5 файле
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

SVM >>>

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

'=============================================
' Переименовать файлы в активном каталоге,
' сопоставляя данные с вложенным CRC-файлом

'  Условие: путь запуска - пустой
' Параметр: <CRC-сумма:md5|sha1|sha256|sha512>

' Автор: Flasher ©
'=============================================

CRC = UCase(WScript.Arguments(0))
Dim WSH : Set WSH = CreateObject("WScript.Shell")
If InStrRev(WScript.FullName, "WScript.exe") Then
  WSH.Run "CScript.exe //I //D """ & WScript.ScriptFullName & """ " & CRC, 0
  WScript.Quit
Else
  Path = WSH.CurrentDirectory
  Set Items = CreateObject("Shell.Application").NameSpace(Path).Items
  Items.Filter 192, "*." & CRC
  If Items.Count = 1 Then
    Set Dict = CreateObject("Scripting.Dictionary")
    Set FSO  = CreateObject("Scripting.FileSystemObject")
    For Each F in Split(FSO.OpenTextFile(Items.Item(0)).ReadAll, vbnewline)
      If F <> "" Then
        E = InStr(F, " ") : Sum = Left(F, E - 1)
        If Not Dict.Exists(Sum) Then Dict.Add Sum, Mid(F, E + 2)
      End If
    Next
    For Each F in FSO.GetFolder(Path).Files
      If UCase(FSO.GetExtensionName(F)) <> CRC Then
        Set Exe = WSH.Exec("certutil -hashfile """ & F & """ " & CRC).StdOut
        Exe.SkipLine : Sum = Replace(Exe.ReadLine, " ", "")
        If Dict.Exists(Sum) Then
          N = Dict.Item(Sum) : If Not FSO.FileExists(N) Then F.Name = N
        End If
      End If
    Next : WSH.SendKeys "^R"
  End If
End If
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
SVM
Сообщения: 47
Зарегистрирован: Чт окт 16, 2008 16:36

Сообщение SVM »

Flasher
Спасибо за скрипт! А что вписывать в параметры кнопки? Возможно ли сделать, чтобы скрипт работал с подпапками или выделенными папками?
Ответить