JoinSubDirs

Название Join Subdirectories
Имя файла (*.txt) JoinSubDirs.txt
Описание Копирует (и переименовывает) файлы из дочерних директорий в родительскую
Автор Вахмурка
Параметры ("%L", "%P")
или
("%L", "%P", "string")
Вызываемые плагины file, osd
Иконка
Версия 1.1
Дата обновления 16.06.2014
local fh = file.open(arg(1), "r")
local Str, Dir, Par
local Qu = esc(?+\"+, ?+\+)
osd.show("Wait...", "INFINITE", "48", "Arial Cyr", "-1", "255 000 000")

if(fh > 0) do
	for(not(file.eof(fh))) 
		Str = file.readstring(fh)
		if(Str) do
			if(arg(0) == 3) do
;Sub_ParsePath - имя скрипта ParsePath;
				Dir = arg(2) ++ runfile.Subs\Sub_ParsePath(Str, 1) ++ arg(3)
;Sub_MoveFile - имя скрипта MoveFile;
				Par = "runfile.Subs\Sub_MoveFile(" ++ Qu ++ "|" ++ Qu ++ ", Dir)"
				file.allfiles(Str, Par)
			else
				Par = Str ++ "*.*"
				if(file.move(Par, arg(2), 1) != "1") do
					file.close(fh)
					quit
				endif
			endif
			file.delete(remove(Str, -1))
		endif
	endfor
else
	messagebox("ok error", "File not opened", "FILE plugin error")
	osd.hide
	quit
endif

file.close(fh)
win.sendmessage(win.handle("c=TTOTAL_CMD"), 0x400+51, 540, 0)
osd.show("Ready!", "1000", "48", "Arial Cyr", "-1", "000 255 000")
osd.hide

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

Пусть есть следующая структура директорий:

Folder1
	File1.ext
	File2.ext
Folder2
	File3.ext
	File4.ext

Первые два параметра скрипта всегда ("%L", "%P"). Если третий отсутствует, то скрипт просто перемещает файлы из дочерних директорий в текущую, и затем удаляет пустые дочерние. Иными словами, после выделения в группу директорий Folder1 и Folder2 и запуска скрипта с параметрами ("%L", "%P") получим следующую структуру:

File1.ext
File2.ext
File3.ext
File4.ext

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

имя_папки + третий_параметр + имя_файла

Символ + означает слияние (конкатенацию). Например, если параметры скрипта ("%L", "%P", ""), структура будет такой:

Folder1File1.ext
Folder1File2.ext
Folder2File3.ext
Folder2File4.ext
А при параметрах ("%L", "%P", "'s child "):
Folder1's child File1.ext
Folder1's child File2.ext
Folder2's child File3.ext
Folder2's child File4.ext
Того же результата можно достичь с помощью MultiRename Tool, задав маской [P][N], воспользовавшись branch view и удалив дочерние директории вручную. Но эти операции не только отнимут много времени, но и чреваты неприятностями. Скрипт позволяет проделать все одним щелчком.
На главную Все о Total Commander PowerPro PowerPro & Total Commander