CopyMoveOnList

Название CopyMoveOnList
Имя файла (*.txt) CopyMoveOnList.txt
Описание Копирует или перемещает файлы/директории, перечисленные в списке-источнике, в файлы/директории, перечисленные в списке-приемнике
Автор Вахмурка
Параметры Список-источник, список-приемник, перемещение
Вызываемые плагины file, vec, osd
Иконка
Версия 1.0
Дата обновления 02.07.2009
args From, To, Move
local i, j, Text, Str, De, A, Item, Dest

if(ctrl)
	Move = 1

if(not validpath(From)) do
	messagebox("ok error", "Source list is not specified", "CopyMoveOnList script")
	quit
endif

if(not validpath(To)) do
	messagebox("ok error", "Target list is not specified", "CopyMoveOnList script")
	quit
endif

local What = ifelse(Move, "Move ", "Copy ")
local Source = file.readall(From)
local v = vec.createfromlines(Source)

if(v <= 0) do
	messagebox("ok error", "Vector not created", "VEC plugin error #1")
	quit
endif

local Target = file.readall(To)
local w = vec.createfromlines(Target)

if(w <= 0) do
	messagebox("ok error", "Vector not created", "VEC plugin error #2")
	quit
endif

local FromC = vec.length(v)
local ToC = vec.length(w)

if(FromC == Toc) do
	for(i = 0; i < FromC; i++)
		From = v[i]
		CheckPath(From)
		To = w[i]
		CheckPath(To)
		Text = What ++ From ++ " to " ++ To
		osd.show(Text, "INFINITE", "14", "Arial", "-1", "255 000 000")
		if(Move) do
			file.move(From, To)
		else
			file.copy(From, To)
		endif
		osd.hide
	endfor
	quit
endif

local Cap = "Select file(s)/folder(s) to " ++ ifelse(Move, "move", "copy")
Text = Cap ++ " FROM:"
pickstring(Source, Text, 3)

if(not _pickedline_)
	quit

From = _pickedline_
De = word(From, 0)
Text = Cap ++ " TO:"
pickstring(Target, Text, 3)

if(not _pickedline_)
	quit

To = _pickedline_
A = word(To, 0)

for(i = 1; i <= De; i++)
	for(j = 1; j <= A; j++)
		Text = word(From, i) - 1
		Item = v[Text]
		CheckPath(Item)
		Text = word(To, j) - 1
		Dest = w[Text]
		CheckPath(Dest)

		Text = What ++ Item ++ " to " ++ Dest
		osd.show(Text, "INFINITE", "14", "Arial", "-1", "255 000 000")

		if(Move) do
			file.move(Item, Dest)
		else
			file.copy(Item, Dest)
		endif

		osd.hide
	endfor
endfor

quit

Function CheckPath(Path)
if(not validpath(Path)) do
	messagebox("ok error", "Path " ++ Path ++ " is invalid", "CopyMoveOnList script")
	quit all
endif
quit

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

Список-источник - текстовый файл, содержащий имена файлов и директорий (без завершающего "\"), по одному имени на строку. Допускаются символы-заменители * и ?. Список-приемник также содержит имена файлов и директорий (с завершающим "\" или без). Полные пути к файлам-спискам представляют собой первый и второй параметры скрипта, соответственно.

Третий параметр задается равным 1, если файлы надо перемещать. К тому же результату (вне зависимоси от параметра) приведет клавиша Ctrl, удерживаемая нажатой в момент запуска скрипта.

Если третий параметр равен 0 или отсутствует, будет производиться копирование, а не перемещение.

Если списки содержат одинаковое число строк, то файлы/директории из первой строки копируются/перемещаются в первый путь-назначение, из второй - во второй, и т. д.

Если числа строк отличаются, то выдаются два диалоговых окна. В первом можно выбрать произвольное количество источников и нажать ОК. Во втором окне выбирается произвольное число путей-приемников. После нажатия ОК все выбранные файлы/директории будут скопированы/перемещены во все выбранные пути-приемники.

Пример списка-источника:

c:\One\Two.txt
d:\Three\Four\*.*
Пример списка-приемника:
e:\Five\Six.htm
f:\Seven\Eight

Поскольку в каждом списке по 2 строки, файл c:\One\Two.txt будет скопирован в файл e:\Five\Six.htm, который должен существовать. Если задано "перемещение", файл-источник будет затем удален. Все файлы из директории d:\Three\Four будут скопированы/перемещены в директорию f:\Seven\Eight.

Второй пример списка-источника:

e:\Nine\Ten.exe
c:\One
d:\Three\Four\*.*

Список-приемник тот же.

Числа строк в списках отличаются (3 и 2), поэтому сначала будет выдан запрос, что копировать/перемещать. Допустим, мы отметили c:\One (это директория) и d:\Three\Four\*.*, и нажали ОК. Во втором окне в качестве пути-приемника выбран путь f:\Seven\Eight. Тогда директория c:\One целиком и все файлы из d:\Three\Four копируются/перемещаются в f:\Seven\Eight.


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