Check Ascending Counter

Название CheckAscCounter
Имя файла (*.txt) CheckAscCounter.txt
Описание Проверяет возрастающий счетчик файлов
Автор Вахмурка
Параметры ("%P", "%O", "%E")
Вызываемые плагины win, file, miscplugin, osd, clip
Иконка
Версия 1.3
Дата обновления 16.06.2014
args Path, Name, Ext
local hwnd = win.handle("c=TTOTAL_CMD")
local Exepath = win.exepath(hwnd)
local Len = length(Name)
local Total = file.allfiles(Path)
local mpDlgCaption = "CheckAscCounter Script"
local mpIcon = "e:\Storage\Graphics\Icons\User\Incr.ico"
local i, j, Char, mpDlgText, Prev
local Quote = esc(?+\"+, ?+\+)
local CtC = "&Copy to Clip"
local Gt = "&Go to"
Ext = "." ++ Ext

for(i = Len; i > 0; i--)
	Char = Name[i - 1]
	if(not miscplugin.is_int(Char))
		break

endfor

if(i == Len) do
	Char = "File name " ++ Name ++ Ext ++ " contains no counter"
	messagebox("ok error", Char, mpDlgCaption)
	quit
endif

Char = select(Name, i - Len)
Name = select(Name, i)
local Digits = length(Char)

for(i = 1; i <= Total; i++)
	osd.show(i ++ " / " ++ Total, "INFINITE", "30", "Arial", "-1", "255 000 000")
	Len = fill(repeat("0", Digits), i)
	Char = Path ++ Name ++ Len ++ Ext
	if(not validpath(Char)) do
		osd.hide
		mpDlgText = "First missing file is '" ++ Char ++ "'"
		local Ans = miscplugin.messagebox(1, Gt, CtC, "&Exit")
		if(Ans == Gt) do
			if(not 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(Char)
		endif
		quit
	endif
	Prev = Name ++ Len
endfor

osd.hide
Prev = " files with ascending numbers"
Char = Quote ++ Total ++ Prev ++ Quote
do("e:\Utils\NirSoft\NirCmd\nircmd.exe", "speak text " ++ Char)
Char = "Directory '" ++ Path ++ "' contains " ++ Total ++ Prev
messagebox("ok information", Char, mpDlgCaption)

Комментарии:

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

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, osd, clip
Иконка
Версия 1.3
Дата обновления 16.06.2014
args Path, Name, Ext
local hwnd = win.handle("c=TTOTAL_CMD")
local Exepath = win.exepath(hwnd)
local Len = length(Name)
local Total = file.allfiles(Path)
local mpDlgCaption = "CheckDescCounter Script"
local mpIcon = "путь_к_иконке\Decr.ico"
local Quote = esc(?+\"+, ?+\+)
local CtC = "&Copy to Clip"
local Gt = "&Go to"
Ext = "." ++ Ext
local i, j, Char, mpDlgText, Prev

for(i = Len; i > 0; i--)
	Char = Name[i - 1]
	if(not miscplugin.is_int(Char))
		break

endfor

if(i == Len) do
	Char = "File name " ++ Name ++ Ext ++ " contains no counter"
	messagebox("ok error", Char, mpDlgCaption)
	quit
endif

Char = select(Name, i - Len)
Name = select(Name, i)
local Digits = length(Char)
local Limit = 1 ++ repeat("0", Digits)

for(i = Limit - 1; i >= Limit - Total; i--)
	Char = Limit - i
	Char = Char ++ " / " ++ Total
	osd.show(Char, "INFINITE", "30", "Arial", "-1", "255 000 000")
	Len = fill(repeat("0", Digits), i)
	Char = Path ++ Name ++ Len ++ Ext
	if(not validpath(Char)) do
		mpDlgText = "First missing file is '" ++ Char ++ "'"
		local Ans = miscplugin.messagebox(1, Gt, CtC, "&Exit")
		if(Ans == Gt) do
			if(not Prev) do
				*keys {end}
			else
				do(Exepath,"/O /S /L=" ++ Quote ++ Path ++ Prev ++ Ext ++ Quote)
				*keys {up}
			endif
		elseif(Ans == CtC) do
			clip.set(Char)
		endif
		quit
	endif
	Prev = Name ++ Len
endfor

Char = "Directory '" ++ Path ++ "' contains " ++ Total ++ " files with descending numbers"
messagebox("ok information", Char, mpDlgCaption)

Комментарии:

Отличие данного скрипта от предыдущего в том, что проверяются номера, идущие в нисходящем порядке:

...
file98
file99
или
...
9998
9999

Первым проверяется номер, состоящий из девяток, и далее по убыванию.


На главную Все о Total Commander PowerPro PowerPro & Total Commander