Поиском нахожу необходимые файлы лежащие в разных директориях, выделяю, вызываю multi-rename tool. Нужно переименовать этот список файлов с использованием счетчика. Как сделать так, чтобы счетчик сбрасывался при переходе в новую директорию?
например я нашел и хочу переименовать файлы:
Имя каталога в MRT само по себе не учитывается.
Как вариант - можно найти (написать?) плагин, выдающий разные результаты в зависимости от пути файла, и использовать его в MRT. Есть или нет конкретно такой плагин - мне не известно.
Если задача разовая, проще, по-моему, пройтись по каталогам, переименовыввая файлы в каждом отдельно.
Первое, что пришло в голову - нельзя. Но попробуй поиграться с ключом [P] - имя родительской директории. Если твоя задача вообще как-то решается, то никак без [P] не обойтись. Кстати, [G] - имя "дедушкиной" (grandpa) директории. Поиграйся с [P], тем более что результат можно увидеть заранее, без переименования как такового.
Сделал скрипт для ScriptContentPlugin, который можно использовать в MRT. При этом текущий счетчик и текущая папка хранятся в реестре. Получилось очень медленно и в общем случае криво.
Brnandman
Лучше сделать скрипт, который сам переименовывает выделенные файлы.
Нужна именно маска вида "photo[C1+1:2]"? Т. е. одинаковый префикс для всех файлов, а далее без разделителя двухзначное число?
Опиши более детально требования для переименования.
сейчас переименовываю вручную с маской
[G]-[P]-picture-[C]
где [C] - трехзначное число
в будущем такое переименование и нужно.
Спасибо всем откликнувшимся
'======================================================================
' Переименование выделенных файлов по маске
' [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
Последний раз редактировалось Batya Сб сен 20, 2008 01:41, всего редактировалось 1 раз.
Batya
переименовывает верно, спасибо
но на каждый файл мне выдает окна:
1)путь к файлу
2)имя P
3)имя G
итого на 10 файлов я получаю 30 окон с сообщениями этими и кнопкой "ok"
может я что-то не так делаю?
Тема объединена с имеющейся. Материал целевой темы, не имевший отношения с счётчику, вынесен в отдельную тему Переименование HTML по заданному фрагменту текста. Соответственно, текущей теме дан другой заголовок.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Здравствуйте, может этот вопрос уже не один раз задавали на форуме, но я лично не нашел... Так вот, суть темы в том, что необходимо произвести нумерацию файлов в подпапках, в данном случае оно должно быть в виде 0001имяфайла.расширение-0999имяфайла.расширение, сами же папки вмещают у себя только 999 файлов, при переходе на следующие папки счетчик нумерации должен сбрасываться до 0001. Но я не нашел способов как это добиться средством Тотала. Возможно то, что сами папки вмещают у себя только фиксированное кол-ство файлов (999 ед.), этому как-то поможет? Может быть нужна какая-то регулярка в ИГП? Например, регулярка именует по счетчику первые 999 выделенных файлов в результате панели поиска, а затем сбрасывает нумерацию при обработке 1000-1998 файлов и так далее... Прошу очень помощи у тех, кто разбирается в Тотале!