узнать суммарный размер файлов через макрос
узнать суммарный размер файлов через макрос
Задача: есть на активной панели N выделенных файлов и директорий. Если их размер больше, к примеру 250мб, отдать их одному плугу, иначе - другому. Всё бы хорошо, только вот как узнать суммарный размер файлов через макрос?
применение: большие файлы, или директории копировать с помощью Background Copy, остальное стандартным копировальщиком или Extended Copy.
применение: большие файлы, или директории копировать с помощью Background Copy, остальное стандартным копировальщиком или Extended Copy.
# Не умеешь работать мышкой - работай лопатой...
Конечно. "Если получится чего".
1. panelitem(0,0,6) возвращает размер файла под курсором. И только файла.
2. Ничего путного не нашел по поводу itemIndex. Известно, что 0 - текущий файл. -1 выдаёт тож самое. Возможно где-то тут собака и порылась(в макросах особо не разбираюсь).
1. panelitem(0,0,6) возвращает размер файла под курсором. И только файла.
2. Ничего путного не нашел по поводу itemIndex. Известно, что 0 - текущий файл. -1 выдаёт тож самое. Возможно где-то тут собака и порылась(в макросах особо не разбираюсь).
# Не умеешь работать мышкой - работай лопатой...
О. Спасибо. осталось суммировать.
на выходе имеем общий размер выделенных файлов и директорий
сравнить - дело малое.
Code: Select all
%x=0;
Home
$While(!APanel.Eof) $If(APanel.Folder) F3 $End Down $End
Home
$While(!APanel.Eof) $If(PanelItem(0,0,8)) %x=PanelItem(0,0,6)+%x;
$End Down $End
сравнить - дело малое.
# Не умеешь работать мышкой - работай лопатой...
Code: Select all
%x=0;
Home
$While(!APanel.Eof) $If(APanel.Folder) F3 $End
$If(PanelItem(0,0,8)) %x=PanelItem(0,0,6)+%x; $End
Down
$End
$If(APanel.Eof && APanel.Folder) F3 %x=PanelItem(0,0,6)+%x;
$Else %x=PanelItem(0,0,6)+%x;
$End
# Не умеешь работать мышкой - работай лопатой...
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Свой вариант:
Code: Select all
%n=panelitem(0,0,0);
Home
%s=0;
$rep(apanel.itemcount)
$if(panelitem(0,0,8))
$if(APanel.Folder)
F3
$end
%s=%s+(panelitem(0,0,6));
$end
Down
$end
panel.setpos(0,%n)
На основе кода от DrKnS законченный макрос «для тех кому лень»:
Если размер объекта под курсором или общий размер всех помеченных объектов на панели больше 256M, то вызываем BCopy, иначе — FileCopyEx.
Если курсорс стоит на ".." и помеченых файлов нет, то копирование вызвается для всей папки (выходим на уровень вверх, и вызываем нужный плагин оттуда).
Кроме того, при вызове FileCopyEx учитывается количество копируемых файлов.
Вот ещё раз он же, но в готовом к употреблению виде:
Code: Select all
%n=panelitem(0,0,0);
%s=0;
%c=APanel.SelCount;
$if(%c>0)
Home
$rep(apanel.itemcount)
$if(panelitem(0,0,8))
$if(APanel.Folder)
F3
$end
%s=%s+(panelitem(0,0,6));
$end
Down
$end
panel.setpos(0,%n);
$else
$if (Bof & !APanel.Root)
CtrlPgUp
$end
$if(APanel.Folder)
F3
$end
%s=(panelitem(0,0,6));
$end
$if (%s<273154048)
F11 >
$if (%c>0)
1
$else
3
$end
$else
F11 B 1
$end
Если курсорс стоит на ".." и помеченых файлов нет, то копирование вызвается для всей папки (выходим на уровень вверх, и вызываем нужный плагин оттуда).
Кроме того, при вызове FileCopyEx учитывается количество копируемых файлов.
Вот ещё раз он же, но в готовом к употреблению виде:
Code: Select all
REGEDIT4
[HKEY_CURRENT_USER\Software\Far\KeyMacros\Shell\F5]
"Sequence"="%n=panelitem(0,0,0); %s=0; %c=APanel.SelCount; $if(%c>0) Home $rep(apanel.itemcount) $if(panelitem(0,0,8)) $if(APanel.Folder) F3 $end %s=%s+(panelitem(0,0,6)); $end Down $end panel.setpos(0,%n); $else $if (Bof & !APanel.Root) CtrlPgUp $end $if(APanel.Folder) F3 $end %s=(panelitem(0,0,6)); $end $if (%s<273154048) F11 > $if (%c>0) 1 $else 3 $end $else F11 B 1 $end"
"DisableOutput"=dword:00000001