|
|
| Название | 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 |