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

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

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

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

Сообщение Flasher »

shadow_405
Странно. А если апостроф перед последней строкой поставить?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
shadow_405
Сообщения: 18
Зарегистрирован: Пн апр 01, 2019 16:37

Сообщение shadow_405 »

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

Сообщение Flasher »

shadow_405
Последняя строка имитирует нажатие Ctrl+r (обновление панели). Что там могло менять сортировку — для меня загадка. Но нужна строка для быстрого обновления. Если опять возникнет такое, то предлагаю в Разном задать Ctrl+Alt+Shift+R для cm_RereadSource. И ^r поменять на ^%R в исходной строке.

Впрочем, чтобы не заботиться о смене, можно отказаться от второго условия:

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

'========================== VBS ===========================
' Переименовать выбранные файлы по шаблону: * № <№+x>.<ext>
' Условие:   путь запуска — пустой
' Параметры: %WF <[-]число счётчика>
' Примеры:   %WF 2   |   %WF -1
'==========================================================
Option Explicit: Dim Rgx, FSO, Col, List, Num, F, i, M
If WSH.Arguments.Count = 0 Then WSH.Quit
Set Rgx = New RegExp
Rgx.Pattern = "(.+№ )(\d+)([a-zа-я]?\.\w+)$"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Col = CreateObject("System.Collections.ArrayList")
Set List = FSO.OpenTextFile(WSH.Arguments(0),,,-1)
Num = CInt(WSH.Arguments(1))
Do: F = List.ReadLine
  If Right(F, 1) <> "\" Then If Rgx.Test(F) Then _
  Col.Add Rgx.Execute(F)(0).SubMatches(1) & "_" & F
Loop Until List.AtEndOfStream: List.Close
Col.Sort : If Num > 0 Then Col.Reverse
For Each F in Col
  F = Split(F, "_")(1) : Set M = Rgx.Execute(F)(0)
  FSO.GetFile(F).Name = M.SubMatches(0) & M.SubMatches(1) + Num & M.SubMatches(2)
Next : Set Col = Nothing : Set FSO = Nothing : Set Rgx = Nothing
CreateObject("WScript.Shell").SendKeys "^r"
Последний раз редактировалось Flasher Чт апр 04, 2019 22:19, всего редактировалось 3 раза.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
shadow_405
Сообщения: 18
Зарегистрирован: Пн апр 01, 2019 16:37

Сообщение shadow_405 »

Flasher
Отлично, попробую!

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

А эта версия выдает ошибку, если один файл от другого отличается только наличием буквы, например:
1983, № 215
1983, № 215а
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

shadow_405
Не подумал. Исправлено.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
shadow_405
Сообщения: 18
Зарегистрирован: Пн апр 01, 2019 16:37

Сообщение shadow_405 »

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

Сообщение Flasher »

shadow_405
Я выше дал рекомендацию без апострофа. Она выполнена?
Насчёт уменьшения не понял.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
shadow_405
Сообщения: 18
Зарегистрирован: Пн апр 01, 2019 16:37

Сообщение shadow_405 »

Flasher
Я именно про последнюю версию кода. Без апострофа опять меняет сортировку, хотя это уже и не так важно, раз работает при любой.
Я пробовал менять в третьей снизу строке ваше "+ 1" на другие значения, например, на "- 1". Вдруг возникнет потребность уменьшить все номера. В предыдущей версии скрипта всё работало и на сложении, и на вычитании, а в последней вычитание не работает.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

shadow_405 писал(а):Я именно про последнюю версию кода.
А я про рекомендацию над ней. Она касается обеих версий. И там же объяснено, зачем это (по части "важно").
shadow_405 писал(а):Я пробовал менять в третьей снизу строке ваше "+ 1" на другие значения, например, на "- 1".
Это так просто не делается. Добавил второй параметр.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
shadow_405
Сообщения: 18
Зарегистрирован: Пн апр 01, 2019 16:37

Сообщение shadow_405 »

Flasher писал(а):А я про рекомендацию над ней. Она касается обеих версий. И там же объяснено, зачем это (по части "важно").
Я думал, это только для старой версии. Сделал всё по инструкции, теперь проблем с сортировкой нет.
Flasher писал(а):Это так просто не делается. Добавил второй параметр.
Отлично, с этим параметром стало вообще идеально! Думаю, улучшать тут уже нечего, спасибо еще раз!
Dimsok
Сообщения: 664
Зарегистрирован: Вс авг 17, 2014 00:45

Сообщение Dimsok »

Нужен скрипт, который будет переименовывать выделенный srt, sub, ass,ssa файлы под имя avi, mkv,mp4 файла, находящегося в той же папке, с добавлением .rus (без расшерения видеофайла). Если файл субтитра с данным именем уже имеется в папке, добавлять .eng. Если файл и с таким именем имеется, то ничего не делать. Ничего не делать и в случае, если в папке нет видеофайлов с такими расширениями, или есть больше одного.

Пример: 111.srt > Terminator.rus.srt (при наличии файла Terminator.mkv). 222.srt > Terminator.eng.srt (при наличии файлов Terminator.mkv и Terminator.rus.srt).
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Dimsok
Перенесено из темы "Script Request" в более подобающее запросу место.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Dimsok
А не лучше в выбранных папках искать сабы и делать остальное?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Dimsok
Сообщения: 664
Зарегистрирован: Вс авг 17, 2014 00:45

Сообщение Dimsok »

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

Сообщение Flasher »

К какому порядку? Объясни нормально. С папками гораздо меньше возни будет.
Dimsok писал(а):Ничего не делать и в случае, если в папке нет видеофайлов с такими расширениями, или есть больше одного.
Логично с этого сразу начинать — до выборки сабов.

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

'========================== VBS ===========================
' Переименование базовых имён выбранных субтитров в базовые
' имена одиночных видеофайлов и годное языковое расширение

' Условие:   путь запуска — пустой

' Параметры: %WL <маска расширений видео>
' Пример:    %WL *.avi;*.mkv;*.mp4
'==========================================================
Option Explicit
Dim Items, List, BN, F, Ext, sExt
If WSH.Arguments.Count = 0 Then WSH.Quit
With CreateObject("Scripting.FileSystemObject")
  Set Items = CreateObject("Shell.Application")._
  NameSpace(.GetAbsolutePathName("")).Items
  Items.Filter 8256, WSH.Arguments(1)
  If Items.Count <> 1 Then WSH.Quit
  Set List = .OpenTextFile(WSH.Arguments(0),,,-1)
  BN = .GetBaseName(Items.Item(0).Path)
  Set Items = Nothing
  Do: F = List.ReadLine
    If Right(F, 1) <> "" Then
      Ext = .GetExtensionName(F)
      If InStr(" srt sub ass ssa ", " " & LCase(Ext) & " ") Then
        sExt = ".rus." : If .FileExists(BN & sExt & Ext) Then sExt = ".eng."
        If Not .FileExists(BN & sExt & Ext) Then .GetFile(F).Name = BN & sExt & Ext
      End If
    End If
  Loop Until List.AtEndOfStream
End With
List.Close : Set List = Nothing
Последний раз редактировалось Flasher Ср июл 31, 2019 09:09, всего редактировалось 1 раз.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Ответить