|
Название | CheckAscCounter |
Имя файла (*.txt) | CheckAscCounter.txt |
Описание | Проверяет возрастающий счетчик файлов |
Автор | Вахмурка |
Параметры | ("%P", "%O", "%E") |
Вызываемые плагины | win, file, miscplugin, clip |
Иконка | |
Версия | 1.4 |
Дата обновления | 18.04.2019 |
args Path, Name, Ext if(!Ext) Ext = "*" Ext = "." ++ Ext local hwnd = win.handle("c=TTOTAL_CMD") local Exepath = win.exepath(hwnd) local Len = length(Name) local mpDlgCaption = "CheckAscCounter Script" local mpIcon = "e:\Storage\Graphics\Icons\User\Incr.ico" local i, j, Char, mpDlgText, Prev, Cur local Quote = esc(?+\"+, ?+\+) local CtC = "&Copy to Clip" local Gt = "&Go to" for(i = Len; i > 0; i--) Char = Name[i - 1] if(not miscplugin.is_int(Char)) break endfor switch (i) case Len Char = "File name " ++ Name ++ Ext ++ " contains no counter" messagebox("ok error", Char, mpDlgCaption) quit case 0 Char = Name Name = "" break case else Char = Name[i, Len - 1] Name = Name[0, i - 1] endswitch local Digits = length(Char) local Total = repeat("9", Digits) for(i = eval(Char); i <= Total; i++) Len = fill(repeat("0", Digits), i) Cur = Path ++ Name ++ Len ++ Ext miscplugin.BalloonTip(1, "information", i, "timeout=5") if(!validpath(Cur)) do mpDlgText = "First missing file is '" ++ Cur ++ "'" local Ans = miscplugin.messagebox(1, Gt, CtC, "&Exit") if(Ans == Gt) do if(!Prev) do win.sendmessage(hwnd, 0x400+51, 2050, 0) else do(Exepath,"/O /S /L=" ++ Quote ++ Path ++ Prev ++ Ext ++ Quote) *keys {down} endif elseif(Ans == CtC) do clip.set(Cur) endif quit endif Prev = Name ++ Len endfor
Как именовать многочисленные однотипные файлы, особенно когда важен их порядок? Разумеется, номерами, например, так:
file-001
file-002
...
или
0001
0002
...
Иными словами, имена всех файлов оканчиваются одинаковым количеством цифровых символов.
При удалении, переименовании или добавлении файлов нумерация сбивается. Скрипт проверяет, что файлы пронумерованы последовательно, в восходящем порядке, начиная с единицы. При обнаружении "разрыва" в нумерации можно либо непосредственно перейти к следующему файлу, либо скопировать имя пропущенного файла в буфер. Перед запуском скрипта курсор следует установить на один из файлов, имя которого послужит "образцом" при проверке других.
Можно, конечно, использовать MultiRename Tool, но переименование большого количества файлов может занять очень долгое время, в течение которого Total Commander оказывается недоступным. Например, в одной директории у меня 24589 файлов. Если сбой нумерации произошел на номере 24585, то ни с какой точки зрения нет смысла перенумеровывать все.
Название | CheckDescCounter |
Имя файла (*.txt) | CheckDescCounter.txt |
Описание | Проверяет убывающий счетчик файлов |
Автор | Вахмурка |
Параметры | ("%P", "%O", "%E") |
Вызываемые плагины | win, file, miscplugin, clip |
Иконка | |
Версия | 1.4 |
Дата обновления | 18.04.2019 |
args Path, Name, Ext if(!Ext) Ext = "*" Ext = "." ++ Ext local hwnd = win.handle("c=TTOTAL_CMD") local Exepath = win.exepath(hwnd) local Len = length(Name) local mpDlgCaption = "CheckAscCounter Script" local mpIcon = "e:\Storage\Graphics\Icons\User\Incr.ico" local i, j, Char, mpDlgText, Prev, Cur local Quote = esc(?+\"+, ?+\+) local CtC = "&Copy to Clip" local Gt = "&Go to" for(i = Len; i > 0; i--) Char = Name[i - 1] if(not miscplugin.is_int(Char)) break endfor switch (i) case Len Char = "File name " ++ Name ++ Ext ++ " contains no counter" messagebox("ok error", Char, mpDlgCaption) quit case 0 Char = Name Name = "" break case else Char = Name[i, Len - 1] Name = Name[0, i - 1] endswitch local Digits = length(Char) local Total = repeat("0", Digits) for(i = eval(Char); i >= Total; i--) Len = fill(repeat("0", Digits), i) Cur = Path ++ Name ++ Len ++ Ext miscplugin.BalloonTip(1, "information", i, "timeout=5") if(!validpath(Cur)) do mpDlgText = "First missing file is '" ++ Cur ++ "'" local Ans = miscplugin.messagebox(1, Gt, CtC, "&Exit") if(Ans == Gt) do if(!Prev) do win.sendmessage(hwnd, 0x400+51, 2050, 0) else do(Exepath,"/O /S /L=" ++ Quote ++ Path ++ Prev ++ Ext ++ Quote) *keys {down} endif elseif(Ans == CtC) do clip.set(Cur) endif quit endif Prev = Name ++ Len endfor
Отличие данного скрипта от предыдущего в том, что проверяются номера, идущие в нисходящем порядке:
...
file98
file99
или
...
9998
9999
Первым проверяется номер, состоящий из девяток, и далее по убыванию.
На главную | Все о Total Commander | PowerPro | PowerPro & Total Commander |