Мультикопирование

Вам не хватает чего-то в Far? Вы считаете, что вашу идею стоит услышать? Пишите сюда.
Dee
Posts: 5
Joined: Wed 25 Apr, 2012 10:55

Мультикопирование

Post by Dee »

MultuCopy
Сделайте пожалуйста такую фичу.
Есть у меня скрипты (один и тот же файл), который должен быть в каждой папке (а папок этих - тьма!). Вот было бы здорово еслиб в одной панельке я указал нужный файл (или файлы), а в другой - папки куда это добро скопировать одним нажатием. Наверное не очень сложная примочка. Пользуюсь пока одной утилитой для этого, но прям скажем, не очень удобная. Встройте такую фичу в фар, пожалуйста.

Заранее спасибо.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Мультикопирование

Post by Maximus5 »

внезапно, фича встроена в фар еще при царе горохе
hint: Process multiple destinations и макрос
Dee
Posts: 5
Joined: Wed 25 Apr, 2012 10:55

Re: Мультикопирование

Post by Dee »

Это где через запятую мне надо двести пятнадцать разноименных папок вписать? Действительно, внезапно. :)
Вы мну взбодрили :shock: .
Если я ошибаюсь, дайте еще хинта. Мне хочется просто выбранные файлы в выбранные папки одним нажатием посылать.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Мультикопирование

Post by Maximus5 »

читайте внимательнее - я уже сказал, макрос, и никаких "руками"
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Мультикопирование

Post by Maximus5 »

Code: Select all

macro
  Key="AltF5"
  Descr="Copy to selected folders on passive panel"
  Area="Shell"
{{
  $if (APanel.Plugin || (PPanel.SelCount<1) || PPanel.Plugin)
    F5
    $Exit
  $end

  %dest="";
  %i=1;
  %p=PPanel.Path+"\\";
  $while (%i<=PPanel.ItemCount)
    $If (panel.item(1,%i,8) && (panel.item(1,%i,2) & 16))
      %s=%p+panel.item(1,%i,0);
      $if (index(%s,";")>=0 || index(%s,",")>=0)
        %s="\""+%s+"\"";
      $end
      %dest=%dest+%s+";";
    $End
    %i=%i+1;
  $End

  F5
  $if (!Dialog || (Dlg.Info.Id!="FCEF11C4-5490-451D-8B4A-62FA03F52759" && Dlg.Info.Id!="{FCEF11C4-5490-451D-8B4A-62FA03F52759}"))
    $Exit
  $end

  Del print(%dest)
  AltM // english interface!
  Add
  AltO // english interface!
}}
Last edited by Maximus5 on Wed 25 Apr, 2012 13:35, edited 1 time in total.
User avatar
Wave
Posts: 1887
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 14 times
Been thanked: 26 times

Re: Мультикопирование

Post by Wave »

А зачем «$if (!Dialog || Dlg.Info.Id!=»? Допустим, я во втором ФАРе (или что там отсекается, во всяком случае пока не закомментил, не заработало) тоже хочу такую фичу.
Пользуюсь ФАРом больше 20 лет © собирательный.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Re: Мультикопирование

Post by John Doe »

Wave
Тогда вам стоит разобраться для чего служит Dlg.Info.Id, и найти ему замену для Far 2.

Это элементарно.
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Мультикопирование

Post by zg »

John Doe wrote:Wave
Тогда вам стоит разобраться для чего служит Dlg.Info.Id, и найти ему замену для Far 2.
он был в far2. причём очень давно. другой вопрос, что у конкретного диалога может не быть гуида.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Мультикопирование

Post by Maximus5 »

был. Но! фигурные скобки )
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Мультикопирование

Post by Maximus5 »

расширенный

Code: Select all

macro
  Key="F5 F6" Cond="PanelType:0"
  Descr="Autoappend single file name to the Copy/Move destination or Copy to selected folders on passive panel"
{{
  $if (Key(#Akey)=="F5" && !APanel.Plugin && (PPanel.SelCount>=1) && !PPanel.Plugin)
    %dest="";
    %i=1;
    %p=PPanel.Path+"\\";
    $while (%i<=PPanel.ItemCount)
      $If (panel.item(1,%i,8) && (panel.item(1,%i,2) & 16))
        %s=%p+panel.item(1,%i,0);
        $if (index(%s,";")>=0 || index(%s,",")>=0)
          %s="\""+%s+"\"";
        $end
        %dest=%dest+%s+";";
      $End
      %i=%i+1;
    $End

    $if (%dest!="")
      F5
      // Far3 - w/o brackets
      $if (!Dialog || (Dlg.Info.Id!="FCEF11C4-5490-451D-8B4A-62FA03F52759" && Dlg.Info.Id!="{FCEF11C4-5490-451D-8B4A-62FA03F52759}"))
        $Exit
      $end

      Del print(%dest)
      AltM // english interface!
      Add
      AltO // english interface!

      $Exit
    $end
  $end

  $if (!PPanel.Plugin && APanel.SelCount<2 && PPanel.Visible && APanel.Path!=PPanel.Path)
    Clip(5,2) CtrlShiftIns %f=replace(Clip(0),"\"","");
    $if ((panel.fattr(0,%f) & 0x10) == 0)
      eval(Key(#Akey))
      End
      print(%f)
      Home ShiftEnd
    $else
      eval(Key(#Akey))
    $end
  $Else
    eval(Key(#Akey))
  $end

  // Clear "Filter" checkbox
  $if (Dialog && (Dlg.Info.Id=="FCEF11C4-5490-451D-8B4A-62FA03F52759" || Dlg.Info.Id=="{FCEF11C4-5490-451D-8B4A-62FA03F52759}"))
    $if (env("FARLANG")=="English")
      AltU
      $if (Dlg.CurPos==15)
        Subtract AltO
      $end
    $else
      $rep(5) ShiftTab $end
      $if (Dlg.CurPos==15)
        Subtract $rep(5) Tab $end
      $end
    $end
  $end

  $if (Key(#Akey)=="F5")
    AltM // english interface!
    Subtract
    AltO // english interface!
  $end
}}
Last edited by Maximus5 on Wed 25 Apr, 2012 21:32, edited 3 times in total.
User avatar
Wave
Posts: 1887
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 14 times
Been thanked: 26 times

Re: Мультикопирование

Post by Wave »

Да, действительно, с фигурными скобками заработало. Просто как по мне, эта проверка несколько избыточна и ничего криминального и без неё бы не случилось. Но да ладно, с ней — надёжней.
Пользуюсь ФАРом больше 20 лет © собирательный.
AlexII
Posts: 270
Joined: Mon 10 Apr, 2006 00:53
Location: станица Григорополисская
Has thanked: 147 times
Contact:

Re: Мультикопирование

Post by AlexII »

А я бы для начала спросил — «Уважаемый коллега, а нахрена зачем Вам двести пятьдесят копий одного и того же скрипта по разным папкам?» Есть некоторое подозрение, что в этом нет необходимости.
AlexII
Posts: 270
Joined: Mon 10 Apr, 2006 00:53
Location: станица Григорополисская
Has thanked: 147 times
Contact:

Re: Мультикопирование

Post by AlexII »

А вообще…
Вот было бы здорово еслиб в одной панельке я указал нужный файл (или файлы), а в другой - папки куда это добро скопировать одним нажатием. Наверное не очень сложная примочка.
На пассивной панели указать потребный файл, на активной панели — выделить потребные папки. Нажать «Ctrl-G», в диалоговом окне ввести:

Code: Select all

copy /y "!#!\!.!" "!^!\!.!"
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Мультикопирование

Post by Maximus5 »

не работает
мне вот нужно два файла скопировать
кроме того, логика пассивной-активной панели крышу сносит
AlexII
Posts: 270
Joined: Mon 10 Apr, 2006 00:53
Location: станица Григорополисская
Has thanked: 147 times
Contact:

Re: Мультикопирование

Post by AlexII »

Maximus5 wrote:мне вот нужно два файла скопировать
В ТЗ этого не было ;).


С более чем одним файлом так не выйдет. Тут для одного-то… Потому такая интересная логика, шиворот-навыворот, была использована. Вот ещё, не менее извращённая, для копирования посредством «Apply command» нескольких помеченных на пассивной панели файлов в каждую из помеченных на активной панели папок:

Code: Select all

for /f "delims==" %i in (!#!@!) do @copy /y "!\%i" "!^!\!.!\"
Post Reply

Return to “Предложения и идеи”