Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Переименование с периодическим сбросом счётчика
Goto page 1, 2, 3, 4, 5, 6  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Brnandman



Joined: 14 Sep 2008
Posts: 12

Post (Separately) Posted: Sun Sep 14, 2008 17:51    Post subject: Переименование с периодическим сбросом счётчика Reply with quote

Поиском нахожу необходимые файлы лежащие в разных директориях, выделяю, вызываю 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
Back to top
View user's profile Send private message
D1P



Joined: 20 Dec 2004
Posts: 2866
Location: Москва

Post (Separately) Posted: Sun Sep 14, 2008 17:59    Post subject: Reply with quote

Имя каталога в MRT само по себе не учитывается.
Как вариант - можно найти (написать?) плагин, выдающий разные результаты в зависимости от пути файла, и использовать его в MRT. Есть или нет конкретно такой плагин - мне не известно.
Если задача разовая, проще, по-моему, пройтись по каталогам, переименовыввая файлы в каждом отдельно.
_________________
База знаний о Total Commander
Блог
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2491
Location: Большая деревня Москва

Post (Separately) Posted: Sun Sep 14, 2008 18:05    Post subject: Reply with quote

Первое, что пришло в голову - нельзя. Но попробуй поиграться с ключом [P] - имя родительской директории. Если твоя задача вообще как-то решается, то никак без [P] не обойтись. Кстати, [G] - имя "дедушкиной" (grandpa) директории. Поиграйся с [P], тем более что результат можно увидеть заранее, без переименования как такового.
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Brnandman



Joined: 14 Sep 2008
Posts: 12

Post (Separately) Posted: Mon Sep 15, 2008 15:11    Post subject: Reply with quote

задача не разовая, плагина тоже такого не нашел
игры с [P] и [G] ни к чему не привели, насквозь нумерует файлы и все тут
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2198
Location: Москва, Россия

Post (Separately) Posted: Mon Sep 15, 2008 17:33    Post subject: Reply with quote

Сделал скрипт для ScriptContentPlugin, который можно использовать в MRT. При этом текущий счетчик и текущая папка хранятся в реестре. Получилось очень медленно и в общем случае криво.

Brnandman
Лучше сделать скрипт, который сам переименовывает выделенные файлы.
Нужна именно маска вида "photo[C1+1:2]"? Т. е. одинаковый префикс для всех файлов, а далее без разделителя двухзначное число?
Опиши более детально требования для переименования.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Brnandman



Joined: 14 Sep 2008
Posts: 12

Post (Separately) Posted: Mon Sep 15, 2008 23:55    Post subject: Reply with quote

сейчас переименовываю вручную с маской
[G]-[P]-picture-[C]
где [C] - трехзначное число
в будущем такое переименование и нужно.
Спасибо всем откликнувшимся Smile
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2198
Location: Москва, Россия

Post (Separately) Posted: Tue Sep 16, 2008 18:02    Post subject: Reply with quote

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
Back to top
View user's profile Send private message
Brnandman



Joined: 14 Sep 2008
Posts: 12

Post (Separately) Posted: Fri Sep 19, 2008 19:29    Post subject: Reply with quote

Batya
переименовывает верно, спасибо
но на каждый файл мне выдает окна:
1)путь к файлу
2)имя P
3)имя G
итого на 10 файлов я получаю 30 окон с сообщениями этими и кнопкой "ok"
может я что-то не так делаю?
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2198
Location: Москва, Россия

Post (Separately) Posted: Sat Sep 20, 2008 01:40    Post subject: Reply with quote

Brnandman
Гы-гы Smile
Отладочные строки забыл убрать Confused

Исправил исходный скрипт.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Brnandman



Joined: 14 Sep 2008
Posts: 12

Post (Separately) Posted: Sat Sep 20, 2008 10:43    Post subject: Reply with quote

Batya
Спасибо!
Существенно проще, чем ручками Smile
Back to top
View user's profile Send private message
slideray



Joined: 28 Jun 2010
Posts: 111

Post (Separately) Posted: Thu Apr 12, 2012 06:42    Post subject: Счетчик с предельным значением Reply with quote

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

например:
начать счет с 4-ёх, досчитать до 15-ти, снова начать считать с 4-ёх...
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 8666
Location: Россия, Саратов

Post (Separately) Posted: Thu Apr 12, 2012 07:06    Post subject: Reply with quote

slideray
В стандартном инструменте TC — нет.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 12071
Location: Москва

Post (Separately) Posted: Thu Apr 12, 2012 11:42    Post subject: Reply with quote

Похожая задача.
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 8666
Location: Россия, Саратов

Post (Separately) Posted: Thu Apr 12, 2012 11:57    Post subject: Reply with quote

Тема объединена с имеющейся. Материал целевой темы, не имевший отношения с счётчику, вынесен в отдельную тему Переименование HTML по заданному фрагменту текста. Соответственно, текущей теме дан другой заголовок.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
BeardFury78



Joined: 25 Aug 2016
Posts: 178

Post (Separately) Posted: Wed Aug 31, 2016 10:02    Post subject: Нумерация файлов со сбросом при переходе на следующую папку Reply with quote

Здравствуйте, может этот вопрос уже не один раз задавали на форуме, но я лично не нашел... Так вот, суть темы в том, что необходимо произвести нумерацию файлов в подпапках, в данном случае оно должно быть в виде 0001имяфайла.расширение-0999имяфайла.расширение, сами же папки вмещают у себя только 999 файлов, при переходе на следующие папки счетчик нумерации должен сбрасываться до 0001. Но я не нашел способов как это добиться средством Тотала. Возможно то, что сами папки вмещают у себя только фиксированное кол-ство файлов (999 ед.), этому как-то поможет? Может быть нужна какая-то регулярка в ИГП? Например, регулярка именует по счетчику первые 999 выделенных файлов в результате панели поиска, а затем сбрасывает нумерацию при обработке 1000-1998 файлов и так далее... Прошу очень помощи у тех, кто разбирается в Тотале!
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page 1, 2, 3, 4, 5, 6  Next
Page 1 of 6

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group