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

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

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

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

Сообщение Flasher »

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

Сообщение sa »

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

Сообщение Flasher »

sa
Всё, нашёл проблему, буду чинить.

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

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

Сообщение sa »

На моей тестовой выборке теперь работает за два вызова.
Осталось выполнить два захода внутри самого скрипта, в случае, когда второй параметр отсутствует или 0. :D
Последний раз редактировалось sa Чт май 07, 2015 16:18, всего редактировалось 1 раз.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

Сообщение sa »

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

Сообщение Flasher »

sa
Я, кажется, понял, что [s]тебе[/s] нужно. Пропускать первые, начиная с единицы, имена, а далее понижать номера до закрытия дыр.
Обойтись без двойного вызова не проблема, сделаю просто немного иначе.

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

'==========================================================
' Именовать файлы нумерацией в структуре активного каталога
' в чётких пределах от 1-цы до числа рассматриваемых файлов

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

' Параметр (необязательный): <фильтр-список расширений>
' Пример: *.jpg;*.jpeg
'==========================================================
With WScript.Arguments
  If .Count Then If .Item(0) <> "" Then Filt = .Item(0) Else Filt = "*.*" End if
End With : Set Dict = CreateObject("Scripting.Dictionary")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set ShA = CreateObject("Shell.Application")
Set SC  = CreateObject("ScriptControl")
With CreateObject("WScript.Shell")
  CD = .CurrentDirectory
  If CD = FSO.GetParentFolderName(WScript.ScriptFullName) Then WScript.Quit
  SC.Language = "JScript" : SC.AddCode("function VBSort(array){return(new VBArray"&_
  "(array).toArray().sort(function(a,b){return parseInt(a,10)-parseInt(b,10)}));}")
  ForFolder CD : .SendKeys "^R"
End With

Sub ForFolder(Path)
  Set Items = ShA.NameSpace(Path).Items : Count = Items.Count
  For i = 1 to Count
    If Filt <> "*.*" Then Flt = Replace(Filt, "*", i) Else Flt = i & ".*"
    Items.Filter 224, Flt : Cnt = Items.Count
    If Cnt = 0 Then Exit For
  Next : Items.Filter 64, Filt
  If Items.Count Then
    If i > Count Then T = 1 : i = 1
    For Each F in Items : Dict.Add F, "" : Next
    For Each F in SC.Run("VBSort", Dict.Keys)
      Ext = FSO.GetExtensionName(F) : If Ext <> "" Then Ext = "." & Ext
      BN = FSO.GetBaseName(F) : N = i & Ext
      If IsNumeric(BN) Then
        If T = "" And (CLng(BN) > i Or Clng(BN) < 1) Then
          If Not FSO.FileExists(Path & "\" & N) And Not _
          FSO.FolderExists(Path & "\" & N) Then F.Name = N End If : i = i + 1
        End If
      Else
        While FSO.FileExists(Path & "\" & N) Or FSO.FolderExists(Path & "\" & N)
          i = i + 1 : N = i & Ext
        Wend : F.Name = N
      End If
    Next : Dict.RemoveAll
  End If : Items.Filter 160, "*"
  For Each Fold in Items : ForFolder Fold.Path : Next
End Sub
Последний раз редактировалось Flasher Пт май 08, 2015 16:16, всего редактировалось 5 раз.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Flasher писал(а):Я, кажется, понял, что тебе нужно.
Почему мне? Разве
Именовать файлы нумерацией в структуре активного каталога
в чётких пределах от 1-цы до числа рассматриваемых файлов
это не то же самое, что
a-dasler писал(а):Как во всех подкаталогах сразу переименовать просто по порядку номеров?
То есть 1.jpg, 2.jpg, 3.jpg....
?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

sa писал(а):Почему мне?
Это надо у тебя спросить, почему последние три страницы тебя никак не отпустит, в то время как постановщика исходной задачи давно всё устроило.
sa писал(а):это не то же самое
Если рассматривать детально, то не совсем. И тут нечего больше обсуждать.

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

Сообщение sa »

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

Сообщение Flasher »

Из ЛС:
Владимир Айвион писал(а):Пример: У нас имеется 4 фотографии товарной позиции, с наименованиями:

1. Vacuum jug black 502941 (1)
2. Vacuum jug black 502941
3. Vacuum jug black pouring 502941
4. Vacuum jug black tea 1 502941

Что я хочу видеть:

1. 502941
2. 502941_2
3. 502941_3
4. 502941_4
Как я уже ранее предлагал, забираем vbs-скрипт по ссылке. Параметры следующие: %WL .+([0-9]{6}) $1
Предполагается, что у фотографий всё-таки есть расширения.
Если счётчик нужно начинать именно с двойки, то в конце 18-й строки 0 заменить на 1.
Если стандартный вариант со скобками не устраивает, то меняем " (" & i & ")" на "_" & i в 20 строке.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Владимир Айвион
Сообщения: 3
Зарегистрирован: Чт ноя 05, 2015 13:12

Сообщение Владимир Айвион »

Flasher, огромное спасибо за помощь и грамотное руководство по добавлению скриптов.
Dimsok
Сообщения: 664
Зарегистрирован: Вс авг 17, 2014 00:45

Сообщение Dimsok »

Не стал создавать отдельную тему. Задача: переименовать rar архивы по имени содержащейся там папки. В каждом архиве по одной папке. Можно осуществить задуманное посредством ИГП, или для решения этой задачи нужны какие-то штучки от Flasher в виде скриптов? :D
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

Сообщение Dimsok »

Ну мало ли. Ну так если не сложно, сделай штучку. Может, потом можно будет его быстро подкорректировать под другую специфику. Ну там именовать по файлам в архиве и т.п. А то этак даже тупо копипаст не сделаешь, входя в архив, выделяя имя папки и заменяя им имя архива.
Ответить