Переименование с периодическим сбросом счётчика
Select messages from
# through # FAQ
[/[Print]\]
Goto page 1, 2, 3, 4, 5, 6, 7  Next  :| |:
Total Commander -> Автоматизация Total Commander

#1: Переименование с периодическим сбросом счётчика Author: Brnandman PostPosted: Sun Sep 14, 2008 17:51
    —
Поиском нахожу необходимые файлы лежащие в разных директориях, выделяю, вызываю multi-rename tool. Нужно переименовать этот список файлов с использованием счетчика. Как сделать так, чтобы счетчик сбрасывался при переходе в новую директорию?
например я нашел и хочу переименовать файлы:
Code:
c:\new\photo.jpg
c:\new\photo3.jpg
c:\old\photo.jpg
c:\old\photo3.jpg

если использовать маску "photo[C1+1:2]", то получим
Code:
c:\new\photo01.jpg
c:\new\photo02.jpg
c:\old\photo03.jpg
c:\old\photo04.jpg

а мне нужно
Code:
c:\new\photo01.jpg
c:\new\photo02.jpg
c:\old\photo01.jpg
c:\old\photo02.jpg

#2:  Author: D1PLocation: Тбилиси PostPosted: Sun Sep 14, 2008 17:59
    —
Имя каталога в MRT само по себе не учитывается.
Как вариант - можно найти (написать?) плагин, выдающий разные результаты в зависимости от пути файла, и использовать его в MRT. Есть или нет конкретно такой плагин - мне не известно.
Если задача разовая, проще, по-моему, пройтись по каталогам, переименовыввая файлы в каждом отдельно.

#3:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Sun Sep 14, 2008 18:05
    —
Первое, что пришло в голову - нельзя. Но попробуй поиграться с ключом [P] - имя родительской директории. Если твоя задача вообще как-то решается, то никак без [P] не обойтись. Кстати, [G] - имя "дедушкиной" (grandpa) директории. Поиграйся с [P], тем более что результат можно увидеть заранее, без переименования как такового.

#4:  Author: Brnandman PostPosted: Mon Sep 15, 2008 15:11
    —
задача не разовая, плагина тоже такого не нашел
игры с [P] и [G] ни к чему не привели, насквозь нумерует файлы и все тут

#5:  Author: BatyaLocation: Москва, Россия PostPosted: Mon Sep 15, 2008 17:33
    —
Сделал скрипт для ScriptContentPlugin, который можно использовать в MRT. При этом текущий счетчик и текущая папка хранятся в реестре. Получилось очень медленно и в общем случае криво.

Brnandman
Лучше сделать скрипт, который сам переименовывает выделенные файлы.
Нужна именно маска вида "photo[C1+1:2]"? Т. е. одинаковый префикс для всех файлов, а далее без разделителя двухзначное число?
Опиши более детально требования для переименования.

#6:  Author: Brnandman PostPosted: Mon Sep 15, 2008 23:55
    —
сейчас переименовываю вручную с маской
[G]-[P]-picture-[C]
где [C] - трехзначное число
в будущем такое переименование и нужно.
Спасибо всем откликнувшимся Smile

#7:  Author: BatyaLocation: Москва, Россия PostPosted: Tue Sep 16, 2008 18:02
    —
Brnandman

vbs-скрипт:
Code:
'======================================================================
' Переименование выделенных файлов по маске
'   [G]-[P]-{заданное слово}-[C]
'   где [P] - имя родительской папки,
'       [G] - имя папки на 2 уровня вверх ("дедушка"),
'       [С] - отдельный счетчик для каждого [P].
'   При этом расширение файлов не меняется.
'
' Параметры вызова из TC:
' %L
'======================================================================

Option Explicit
'======== Изменяемые параметры ========================================
' Заданное слово для маски переименования
Const GeneralWord = "picture"
' Разделитель в маске
Const Delimiter = "-"
' Разрядность счетчика в маске
Const Precision = 3
'======================================================================

Dim Mess, FSO, FileList, F, P, PF, G, Ext, NewName, NewPath
Dim Errors, Counter

SetMess
Set FSO     = CreateObject("Scripting.FileSystemObject")
Set Errors  = CreateObject("Scripting.Dictionary")
Set Counter = CreateObject("Scripting.Dictionary")
CheckParam
For Each F In Split(FSO.OpenTextFile(FileList, 1, False).ReadAll, vbNewLine)
  F = Trim(F)
  If F <> "" Then
    If FSO.FileExists(F) Then
      Ext = "." & FSO.GetExtensionName(F)
      PF  = FSO.GetParentFolderName(F)
      P   = FSO.GetBaseName(PF)
      G   = FSO.GetBaseName(FSO.GetParentFolderName(PF))
      If Not Counter.Exists(PF) Then
        Counter.Add PF, 1
      Else
        Counter(PF) = Counter(PF) + 1
      End If
      NewName = G & Delimiter & P & Delimiter & GeneralWord & Delimiter & Num(Counter(PF), Precision) & Ext
      NewPath = PF & "\" & NewName
      On Error Resume Next
      FSO.MoveFile F, NewPath
      If Err.Number > 0 Then
        Errors.Add F & "  ->  " & NewName, vbNewLine & Err.Description
      End If
      On Error GoTo 0
    End If
  End If
Next

If Errors.Count > 0 Then
  MessBox JoinErr(Errors), 2
Else
  MessBox Mess(3), 3
End If
Quit

Function Num(pC, pPrecision)
  Num = Right(String(pPrecision, "0") & pC, pPrecision)
End Function

Sub CheckParam
  If WScript.Arguments.Count = 0 Then
    MessBox Mess(1), 1
    Quit
  End If
  FileList  = WScript.Arguments(0)
  If Not FSO.FileExists(FileList) Then
    MessBox Mess(2), 1
    Quit
  End If
End Sub

Sub SetMess
  Set Mess = CreateObject("Scripting.Dictionary")
  Mess.Add 0,  "Переименование по маске"
  Mess.Add 1,  "Не указаны параметры!"
  Mess.Add 2,  "Входной параметр не является файлом!"
  Mess.Add 3,  "Операция завершена."
  Mess.Add 4,  "Операция завершена с ошибками." & vbNewLine
  Mess.Add 5,  "Невозможно выполнить переименование:" & vbNewLine
End Sub

Function JoinErr(pDic)
  Dim lKey
  For Each lKey In pDic
    JoinErr = JoinErr & vbNewLine & vbNewLine & Mess(5) & _
              lKey & pDic(lKey)
  Next
  JoinErr = Mess(4) & JoinErr
End Function

Function MessBox(pMess, pMode)
  Dim lIcon
  Select Case pMode
    Case 1 lIcon = vbCritical    + vbOKOnly
    Case 2 lIcon = vbExclamation + vbOKOnly
    Case 3 lIcon = vbInformation + vbOKOnly
  End Select
  MessBox = MsgBox(pMess, lIcon, Mess(0))
End Function

Sub Quit
  Set Counter = Nothing
  Set Errors  = Nothing
  Set FSO     = Nothing
  Wscript.Quit
End Sub


Last edited by Batya on Sat Sep 20, 2008 01:41; edited 1 time in total

#8:  Author: Brnandman PostPosted: Fri Sep 19, 2008 19:29
    —
Batya
переименовывает верно, спасибо
но на каждый файл мне выдает окна:
1)путь к файлу
2)имя P
3)имя G
итого на 10 файлов я получаю 30 окон с сообщениями этими и кнопкой "ok"
может я что-то не так делаю?

#9:  Author: BatyaLocation: Москва, Россия PostPosted: Sat Sep 20, 2008 01:40
    —
Brnandman
Гы-гы Smile
Отладочные строки забыл убрать Confused

Исправил исходный скрипт.

#10:  Author: Brnandman PostPosted: Sat Sep 20, 2008 10:43
    —
Batya
Спасибо!
Существенно проще, чем ручками Smile

#11: Счетчик с предельным значением Author: slideray PostPosted: Thu Apr 12, 2012 06:42
    —
возможно ли задать такой счетчик в мультипереименовании, что бы при достижении определенного значения обнулялся до первоначального значения?

например:
начать счет с 4-ёх, досчитать до 15-ти, снова начать считать с 4-ёх...

#12:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Apr 12, 2012 07:06
    —
slideray
В стандартном инструменте TC — нет.

#13:  Author: FlasherLocation: Москва PostPosted: Thu Apr 12, 2012 11:42
    —
Похожая задача.

#14:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Apr 12, 2012 11:57
    —
Тема объединена с имеющейся. Материал целевой темы, не имевший отношения с счётчику, вынесен в отдельную тему Переименование HTML по заданному фрагменту текста. Соответственно, текущей теме дан другой заголовок.

#15: Нумерация файлов со сбросом при переходе на следующую папку Author: BeardFury78 PostPosted: Wed Aug 31, 2016 10:02
    —
Здравствуйте, может этот вопрос уже не один раз задавали на форуме, но я лично не нашел... Так вот, суть темы в том, что необходимо произвести нумерацию файлов в подпапках, в данном случае оно должно быть в виде 0001имяфайла.расширение-0999имяфайла.расширение, сами же папки вмещают у себя только 999 файлов, при переходе на следующие папки счетчик нумерации должен сбрасываться до 0001. Но я не нашел способов как это добиться средством Тотала. Возможно то, что сами папки вмещают у себя только фиксированное кол-ство файлов (999 ед.), этому как-то поможет? Может быть нужна какая-то регулярка в ИГП? Например, регулярка именует по счетчику первые 999 выделенных файлов в результате панели поиска, а затем сбрасывает нумерацию при обработке 1000-1998 файлов и так далее... Прошу очень помощи у тех, кто разбирается в Тотале!



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page 1, 2, 3, 4, 5, 6, 7  Next  :| |:
Page 1 of 7

Powered by phpBB © 2001, 2005 phpBB Group