RenAncestry

Название RenAncestry.htm
Имя файла (*.txt) RenAncestry.txt
Описание Переименовывает файлы, используя имя родительской директории любого уровня
Автор Вахмурка
Параметры ("%L", Шаблон, Разделитель)
Вызываемые плагины file
Иконка
Версия 1.1
Дата обновления 18.04.2019
args List, Template, Delim
local fh = file.open(List, "r")
static Slash = "\"
local LT = length(Template)
local Path, Name, i, Dir, Str, Depth, NewName, Ext, Char

if(fh > 0) do
	for(not(file.eof(fh))) 
		Str = file.readstring(fh)
		if(Str) do
			Path = file.folder(Str) ++ Slash
			Name = file.name(Str)
			Ext = "." ++ file.type(Str)
			Depth = word(Path, 0, Slash)
			NewName = Name

			for(i = LT; i > 0; i--)
				Char = Template[i - 1]
				Dir = word(Path, Depth - Char + 1, Slash)
				NewName = Dir ++ Delim ++ NewName
			endfor
		endif
		file.rename(Path ++ Name ++ Ext, Path ++ NewName ++ Ext)
	endfor
else
	messagebox("ok error", "File not opened", "FILE plugin error")
endif

file.close(fh)

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

Допустим, имеется файл с именем c:\One\Two\Three\Four\name.ext. Требуется переименовать его так, чтобы в имени файла фигурировало имя родительской директории того или иного уровня.

Для первого уровня (отсчет ведется от имени файла к корню) задача легко решается через инструмент группового переименования (MRT) Total Commander с помощью, например, маски [P]-[N] – файл получит имя Four-name.ext. Знак "минус" используется в качестве разделителя.

Далее, если мы хотим "вспомнить" имя родительской директории более высокого, второго уровня, родителя родителя, то есть дедушку, следует использовать маску [G][N], где буква "G" и означает "grandfather" – "дедушка". Файл получит имя Threename.ext.

Заставить сам MRT вспомнить о более далеких предках нельзя. А вот заставить его привлечь плагины - можно. Мне удалось найти единственный плагин, позволяющий вспоминать предков дальше второго колена: filex и его функцию GtGrandPaDir. Так что маска [=filex.GtGrandPaDir]$[N] позволит получить файл Two$name.ext.

Но двигаться глубже в генеалогию файла не удается, а мне время от времени бывает необходимо переименовывать файлы с включением в новое имя родителя четвертого и более высоких уровней.

Первый параметр скрипта всегда "%L". Второй - шаблон переименования. Он состоит из цифр, каждая из которых соответствует порядку предка, причем единице соответствует текущая директория. Третий, необязательный, параметр - разделитель.

Например, вызвав скрипт с параметрами ("%L", "13", "%%"), получим фал с тем же путем и именем "Four%Two%name.ext" (знак процента надо указывать дважды). А вот строка параметров ("%L", "243", "-") даст новый файл "Three-One-Two-name.ext".


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