Страница 24 из 52
Добавлено: Пн фев 16, 2015 01:28
Iori
Flasher
А про 2 точки - с точки зрения логики и исходной задачи так и должно быть.
В принципе вы правы. Скрипт находит пробелы и знаки подчёркивания и меняет их на точки, просто две точки это не эстетично выглядит

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

.
Спасибо вам за скрипт и за терпение.
Добавлено: Пн фев 16, 2015 01:59
Flasher
Iori писал(а):просто две точки это не эстетично выглядит
Это как раз-таки не проблема для исходной задачи:
%WL ([^\[\(])[_\s]+([^\]\)]) $1.$2
Т.к. тут действует исключение в скобках. А вот в один проход ещё и убирать пробелы рядом со скобками изнутри вряд ли возможно.
Либо надо для скрипта писать цикл с пределом на указанное число проходов. Это, в принципе, несложно. Тогда параметров будет вдвое больше указанного числа + 2.
Добавлено: Пн фев 16, 2015 02:52
Iori
Flasher
Спасибо
Не надо переделовать скрипт.
Всё отлично работает.
Добавлено: Пн фев 16, 2015 13:14
sa
Iori писал(а):Плюс его можно под себя подгонять.
Скорее всего, подгоняться пользователем будут только параметры, а не сам скрипт.
В кнопке с вызовом ИГП, имя шаблона тоже не составляет труда поменять на другое.
А вот настраивать шаблон (в том числе с использованием регулярных выражений), по- моему, в диалоге ИГП удобнее, поскольку там сразу видно, что во что переименовывается, даже без необходимости выполнения самого переименования.
К тому же имеется функция отката и некоторые другие полезные мелочи.
Спору нет, возможность внесения изменений в содержимом одной кнопки (а не только в кнопке, но и в шаблонах ИГП, как в моём варианте), может стать для кого-то решающим фактором.
Добавлено: Пн фев 16, 2015 15:15
Flasher
sa писал(а):Скорее всего, подгоняться пользователем будут только параметры, а не сам скрипт.
Это и имелось в виду. Но и сам скрипт никто не мешает подгонять под себя. И пользователь здесь вполне конкретный, а не абстрактный.
sa писал(а):возможность внесения изменений в содержимом одной кнопки ... может стать для кого-то решающим фактором.
Фактора здесь как минимум два. И второй, где всё происходит без появления окна, ничуть не менее важен.
Добавлено: Вт фев 17, 2015 14:37
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?
Добавлено: Вт фев 17, 2015 16:06
Flasher
sa
Стоит, уже думал про это, дополнил. Только это касается исключительно обрабатываемого в данный момент элемента. Узнать, что там что-то когда-то подвергалось правке с регекспами, нереально. Да и не вижу смысла этого касаться.
Название кнопки - не для слабонервных...

Честно говоря, не хотел обсуждать кнопку, но вот эти полусекундные задержки глаза откровенно мозолят. Сделал бы уж по-человечески через eval(send_wait(...
Добавлено: Вт фев 17, 2015 16:22
sa
Flasher писал(а):Только это касается исключительно обрабатываемого в данный момент элемента.
Само собой разумеется.
Flasher писал(а):Название кнопки - не для слабонервных...
Можно перенести его в строку "Путь запуска:" (для памяти), а в строке подсказки записать "Точки между словами, где пробелы и знаки подчёркивания" или что-то своё, более читабельное.
через eval(send_wait(
Ага, особенно актуально для ESC: начать дожидаться появления окна, когда оно уже давным-давно открыто.

Добавлено: Вт фев 17, 2015 16:48
Flasher
sa писал(а):Можно перенести
Зачем это мне рассказывать?
sa писал(а):Ага, особенно актуально для ESC
Там вообще неясно, зачем эта задержка.
Добавлено: Вт фев 17, 2015 16:56
sa
Flasher писал(а):ачем это мне рассказывать?
Чтоб другим пригодилось. Я же написал: "можно", а не "можешь".
Добавлено: Вт фев 17, 2015 17:03
Flasher
Ты же в ответ мне написал, а не рядом с кнопкой или в самом коде.
Ещё раз посмотрел на код и не уловил смысла в разделении отправки разных нажатий в одном окне.

В итоге кнопка растянулась на полкилОметра.
Добавлено: Ср фев 18, 2015 09:40
sa
Flasher писал(а):не уловил смысла в разделении отправки разных нажатий в одном окне
Думаю, работа кнопки заметно не изменится, но реализация объединения кучи функций send в одну интерес представляет. Делись!
Добавлено: Вт мар 03, 2015 14:38
SVM
В каждой папке есть файлы и файл с расширением md5 сделанный в Total Commander. В нём crc сумма *Новоё имя файла. Задача: посчитать crc суммы файлов и если сумма совпадает с суммой в md5 файле, то переименовать файлы в новые имена, которые есть в md5 файле
Добавлено: Вт мар 03, 2015 18:29
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
Добавлено: Вт мар 03, 2015 19:18
SVM
Flasher
Спасибо за скрипт! А что вписывать в параметры кнопки? Возможно ли сделать, чтобы скрипт работал с подпапками или выделенными папками?