Check Ascending Counter

Название 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, то ни с какой точки зрения нет смысла перенумеровывать все.


Check Descending Counter

Название 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 Все скрипты