Страница 1 из 7
Переименование с периодическим сбросом счётчика
Добавлено: Вс сен 14, 2008 17:51
Brnandman
Поиском нахожу необходимые файлы лежащие в разных директориях, выделяю, вызываю multi-rename tool. Нужно переименовать этот список файлов с использованием счетчика. Как сделать так, чтобы счетчик сбрасывался при переходе в новую директорию?
например я нашел и хочу переименовать файлы:
Код: Выделить всё
c:\new\photo.jpg
c:\new\photo3.jpg
c:\old\photo.jpg
c:\old\photo3.jpg
если использовать маску "photo[C1+1:2]", то получим
Код: Выделить всё
c:\new\photo01.jpg
c:\new\photo02.jpg
c:\old\photo03.jpg
c:\old\photo04.jpg
а мне нужно
Код: Выделить всё
c:\new\photo01.jpg
c:\new\photo02.jpg
c:\old\photo01.jpg
c:\old\photo02.jpg
Добавлено: Вс сен 14, 2008 17:59
D1P
Имя каталога в MRT само по себе не учитывается.
Как вариант - можно найти (написать?) плагин, выдающий разные результаты в зависимости от пути файла, и использовать его в MRT. Есть или нет конкретно такой плагин - мне не известно.
Если задача разовая, проще, по-моему, пройтись по каталогам, переименовыввая файлы в каждом отдельно.
Добавлено: Вс сен 14, 2008 18:05
Вахмурка
Первое, что пришло в голову - нельзя. Но попробуй поиграться с ключом [P] - имя родительской директории. Если твоя задача вообще как-то решается, то никак без [P] не обойтись. Кстати, [G] - имя "дедушкиной" (grandpa) директории. Поиграйся с [P], тем более что результат можно увидеть заранее, без переименования как такового.
Добавлено: Пн сен 15, 2008 15:11
Brnandman
задача не разовая, плагина тоже такого не нашел
игры с [P] и [G] ни к чему не привели, насквозь нумерует файлы и все тут
Добавлено: Пн сен 15, 2008 17:33
Batya
Сделал скрипт для ScriptContentPlugin, который можно использовать в MRT. При этом текущий счетчик и текущая папка хранятся в реестре. Получилось очень медленно и в общем случае криво.
Brnandman
Лучше сделать скрипт, который сам переименовывает выделенные файлы.
Нужна именно маска вида "photo[C1+1:2]"? Т. е. одинаковый префикс для всех файлов, а далее без разделителя двухзначное число?
Опиши более детально требования для переименования.
Добавлено: Пн сен 15, 2008 23:55
Brnandman
сейчас переименовываю вручную с маской
[G]-[P]-picture-[C]
где [C] - трехзначное число
в будущем такое переименование и нужно.
Спасибо всем откликнувшимся

Добавлено: Вт сен 16, 2008 18:02
Batya
Brnandman
vbs-скрипт:
Код: Выделить всё
'======================================================================
' Переименование выделенных файлов по маске
' [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
Добавлено: Пт сен 19, 2008 19:29
Brnandman
Batya
переименовывает верно, спасибо
но на каждый файл мне выдает окна:
1)путь к файлу
2)имя P
3)имя G
итого на 10 файлов я получаю 30 окон с сообщениями этими и кнопкой "ok"
может я что-то не так делаю?
Добавлено: Сб сен 20, 2008 01:40
Batya
Brnandman
Гы-гы

Отладочные строки забыл убрать
Исправил исходный скрипт.
Добавлено: Сб сен 20, 2008 10:43
Brnandman
Batya
Спасибо!
Существенно проще, чем ручками

Счетчик с предельным значением
Добавлено: Чт апр 12, 2012 06:42
slideray
возможно ли задать такой счетчик в мультипереименовании, что бы при достижении определенного значения обнулялся до первоначального значения?
например:
начать счет с 4-ёх, досчитать до 15-ти, снова начать считать с 4-ёх...
Добавлено: Чт апр 12, 2012 07:06
Avada
slideray
В стандартном инструменте TC — нет.
Добавлено: Чт апр 12, 2012 11:42
Flasher
Добавлено: Чт апр 12, 2012 11:57
Avada
Тема объединена с имеющейся. Материал целевой темы, не имевший отношения с счётчику, вынесен в отдельную тему
Переименование HTML по заданному фрагменту текста. Соответственно, текущей теме дан другой заголовок.
Нумерация файлов со сбросом при переходе на следующую папку
Добавлено: Ср авг 31, 2016 09:02
BeardFury78
Здравствуйте, может этот вопрос уже не один раз задавали на форуме, но я лично не нашел... Так вот, суть темы в том, что необходимо произвести нумерацию файлов в подпапках, в данном случае оно должно быть в виде 0001имяфайла.расширение-0999имяфайла.расширение, сами же папки вмещают у себя только 999 файлов, при переходе на следующие папки счетчик нумерации должен сбрасываться до 0001. Но я не нашел способов как это добиться средством Тотала. Возможно то, что сами папки вмещают у себя только фиксированное кол-ство файлов (999 ед.), этому как-то поможет? Может быть нужна какая-то регулярка в ИГП? Например, регулярка именует по счетчику первые 999 выделенных файлов в результате панели поиска, а затем сбрасывает нумерацию при обработке 1000-1998 файлов и так далее... Прошу очень помощи у тех, кто разбирается в Тотале!