Фоновое копирование с помощью FastCopy

Здесь обсуждается всё, что касается макросов.
DV
Posts: 376
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 12 times
Been thanked: 12 times

Фоновое копирование с помощью FastCopy

Post by DV » Sat 16 Nov, 2019 19:23

Поскольку плагин Background Copy не развивается, а необходимость копирования в фоне есть, было принято волевое решение реализовать копирование в фоне с помощью макроса.
Особенности данного макроса:
1. Код данного макроса базируется на макросах Plugin_FastCopy & Plugin_TeraCopy (C) SimSU
2. Почему именно FastCopy? Потому что это "рабочая лошадка", невзирая на его невзрачный внешний вид. TeraCopy выглядит гораздо приятнее, но при копировании файлов порой возникают проблемы. Это неприемлемо.
3.
4.

Сам макрос, версия 1.3.2:


Он же:
Plugin.FastCopy.1.3.2.7z
(3.49 KiB) Downloaded 6 times
Last edited by DV on Sat 07 Dec, 2019 18:22, edited 7 times in total.

User avatar
HaRT
Moderator
Posts: 9151
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 174 times

Фоновое копирование с помощью FastCopy

Post by HaRT » Sun 17 Nov, 2019 01:50

 ! Message from: HaRT
Тема перенесена, поскольку была создана в нарушение правил раздела.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
Wave
Posts: 1771
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 4 times
Been thanked: 16 times

Фоновое копирование с помощью FastCopy

Post by Wave » Tue 19 Nov, 2019 13:26

Удаление с опцией /no_confirm_del — это не очень хорошая идея. Я нарвался (случайно, из-за того, что Alt+Shift+F8 у меня уже занято и забито в рефлексы). Это при том, что вроде не дурак и не чайник. Да и для копирования с перемещением хотя бы опциональное подтверждение нужно.

Не работает с русскими именами и именами с пробелами. Прога стартует и сообщает, что

Code: Select all

FindFirstFileEx(Не удается найти указанный файл.2) : D:\FastCopy385
FindFirstFileEx(Не удается найти указанный файл.2) : D:\TOOLS\Shells\FAR\x64
Хотя это я разбил имя папки, вставив пробел. «FastCopy385 x64»
Пользуюсь ФАРом больше 20 лет © собирательный.

stefanenko
Posts: 125
Joined: Sun 20 Jun, 2010 12:37
Has thanked: 31 times
Been thanked: 4 times

Фоновое копирование с помощью FastCopy

Post by stefanenko » Tue 19 Nov, 2019 14:29

DV wrote:
Sat 16 Nov, 2019 19:23
воспринимается FastCopy как необходимость подтверждения операции над файлами
Вот как раз, при копировании и перемещении очень хотелось бы диалог подтверждения.

stefanenko
Posts: 125
Joined: Sun 20 Jun, 2010 12:37
Has thanked: 31 times
Been thanked: 4 times

Фоновое копирование с помощью FastCopy

Post by stefanenko » Tue 19 Nov, 2019 14:36

Ну и еще небольшой момент.
К примеру если копировать папку C:\1 в диск C:\ то автоматически создастся копия папки с именем C:\1(1)
Такая себе услуга от программы.

Нужно в настройках это отключать:
  • Option -> Main Settings -> Copy/Move Options -> Use a modified name, if destdir same as src`s parent

User avatar
Xerox
Posts: 242
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 238 times
Been thanked: 2 times

Фоновое копирование с помощью FastCopy

Post by Xerox » Sat 23 Nov, 2019 22:40

Так ведь и не работает с пробелами в имени файлов

User avatar
Xerox
Posts: 242
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 238 times
Been thanked: 2 times

Фоновое копирование с помощью FastCopy

Post by Xerox » Sun 24 Nov, 2019 00:39

Привожу свой исправленный вариант, проблема с пробелами починена
Last edited by Xerox on Sun 24 Nov, 2019 00:41, edited 2 times in total.

DV
Posts: 376
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 12 times
Been thanked: 12 times

Фоновое копирование с помощью FastCopy

Post by DV » Sun 24 Nov, 2019 17:00

Спасибо за отзывы! Обновил макрос в шапке, чтобы единичный элемент (файл/папка) с пробелами в имени обрамлялся кавычками. А также добавил информацию про "Use a modified name, if destdir same as src`s parent" в инструкцию.
Буду переделывать макрос, чтобы перед любыми операциями вначале средствами макроса показывался диалог подтверждения, а только потом вызывался FastCopy.

User avatar
Xerox
Posts: 242
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 238 times
Been thanked: 2 times

Фоновое копирование с помощью FastCopy

Post by Xerox » Sun 24 Nov, 2019 20:10

DV, Давай, дерзай :)
я сделал тут (не очень глубокий) обзор, и пока мне кажется что этот твой путь наиболее перспективный для копирования
Last edited by Xerox on Sun 24 Nov, 2019 20:11, edited 2 times in total.

DV
Posts: 376
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 12 times
Been thanked: 12 times

Фоновое копирование с помощью FastCopy

Post by DV » Mon 25 Nov, 2019 21:09

Выложил версию 1.2 с диалогами подтверждения. Заодно чуть ближе познакомился с Lua :)
Поскольку теперь запуск FastCopy отделён от вызова макроса диалогом подтверждения, горячие клавиши изменены на более привычные Ctrl+Shift+F5/F6/F8.

DV
Posts: 376
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 12 times
Been thanked: 12 times

Фоновое копирование с помощью FastCopy

Post by DV » Sun 01 Dec, 2019 18:20

Версия 1.3 - в диалоги подтверждения добавлена кнопка [FastCopy...], а также добавлены "горячие клавиши" для всех кнопок.
Кнопка [FastCopy...] показывает окно FastCopy без автоматического запуска операций над файлами. Это полезно для изменения настроек FastCopy, редактирования списка переданных файлов или отмены операции.

buniak_a_h
Posts: 1234
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 88 times
Been thanked: 74 times
Contact:

Фоновое копирование с помощью FastCopy

Post by buniak_a_h » Sun 01 Dec, 2019 20:29

Сразу для следующей версии:
после строки 196
local pathToFastCopy = normpath(Cfg.FastCopyPath:gsub('%%(%w+)%%', win.GetEnv))
вставьте такое:

Code: Select all

  if not mf.fexist(pathToFastCopy) then
   pathToFastCopy = win.SearchPath(nil, mf.fsplit(Cfg.FastCopyPath, 12)) or pathToFastCopy
  end
Это позволит, если после установки FastCopy путь к ней будет прописан в %Path%, обойтись без настройки (которой, кстати, я в макросе не нашёл).

buniak_a_h
Posts: 1234
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 88 times
Been thanked: 74 times
Contact:

Фоновое копирование с помощью FastCopy

Post by buniak_a_h » Sun 01 Dec, 2019 21:27

Ещё несколько замечаний:
  1. некая ошибка:
    DV wrote:
    Sat 16 Nov, 2019 19:23
    if c == ':' or ((c == '\\' or c == '/') and c == filename.sub(1, 1)) then
    здесь, видимо, д.б. двоеточие … Хотя, может быть вообще заменить на filename:match([[^%a:%\]]) ? Но может я и не прав: смысла сравнивать первый символ со вторым я не понял…
    Но на самом деле знаете ли Вы такую функцию: far.ConvertPath? С флагом CPM_FULL (умолчательным) эта функция преобразовывает имя файла в полный путь. Может, в свете этого функция full_path становится не нужна?
  2. В упомянутой full_path некорректность:
    dir .. '\\' .. filename
    dir = C:\
    filename = qqq (имеется в виду скопировать весь каталог C:\qqq)
    получится C:\\qqq
    Не фатально, но некрасиво...
  3. Пожелание по выкладке (важно!)
    Скрипт довольно большой. Чтобы сделать у себя, дейс твую так:
    • Отметить всё
    • в буфер
    • в ФАРе создаю новый файл в кодировке UTF8
    • пытаюсь вставить из буфера
      ОПА! "Слишком длинная строка" :-(
      Кладите в качестве вложения , чтоб не пришлось задействовать "левые" (в моём случае - Notepad++) программы
Last edited by buniak_a_h on Sun 01 Dec, 2019 21:28, edited 1 time in total.

DV
Posts: 376
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 12 times
Been thanked: 12 times

Фоновое копирование с помощью FastCopy

Post by DV » Sun 01 Dec, 2019 21:46

buniak_a_h wrote:
Sun 01 Dec, 2019 20:29

Code: Select all

pathToFastCopy = win.SearchPath(nil, mf.fsplit(Cfg.FastCopyPath, 12)) or pathToFastCopy
Попробовал, но толку с win.SearchPath почти никакого :(
Например:
1. Запускаю cmd
2. Внутри cmd пишу: set PATH=%PATH%;C:\Progs\FastCopy\FastCopy.exe
3. И затем: cd C:\FAR3 && far.exe
4. Так вот, win.SearchPath не находит путь C:\Progs\FastCopy\FastCopy.exe, который я прописал в переменной %PATH% непосредственно перед запуском FAR !

А чем добавлять этот путь в системную переменную %PATH%, так уже проще модифицировать скрипт, как сказано в шапке в секции "Особенности реализации":
Переменная FastCopyPath (внутри макроса) указывает путь к FastCopy.exe
Last edited by DV on Sun 01 Dec, 2019 22:09, edited 1 time in total.

buniak_a_h
Posts: 1234
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 88 times
Been thanked: 74 times
Contact:

Фоновое копирование с помощью FastCopy

Post by buniak_a_h » Sun 01 Dec, 2019 22:13

DV wrote:
Sun 01 Dec, 2019 21:46
Попробовал, но тольку с win.SearchPath почти никакого
«Почти» - это как?
На самом деле после установки прописал в переменную, добавил путь в path (в свойствах компа! С cmd окружение странно взаимодействует то ли с ФАРом, то ли с ConEmu, то ли с консолью), добавил 3 строчки. И всё заработало.
DV wrote:
Sun 01 Dec, 2019 21:46
проще модифицировать скрипт
Это была последняя версия? Тогда - да. Иначе проще в следующеё версии добавить указанные строки и не париться с редактированием скрипта при каждом выходе версии. Ну, или делать настройку (не уверен, что это - менее трудоёмко. Хотя было бы самым правильным. Заодно и хоткеи менять можно было бы.).
Тут главное - "не навреди". Три строчки не навредят, а помочь могут.
DV wrote:
Sun 01 Dec, 2019 21:46
чем добавлять этот путь в системную переменную %PATH%
В системную переменную обычно добавляют корректно написанные инсталляторы. Китайцы - авторы FastCopy - не озаботились, но это - пока; могут и добавить.
Можно, конечно, искать в Start-МЕНЮ (у меня есть такой скрипт, могу одолжить). Это было, наверно, удобно, но конкретно FastCopy можно устанавливать без образования ярлыков Extract only. Можно при первом запуске сигнализировать и спрашивать путь; затем запоминать его. Это вообще было бы универсально. А так, как сейчас -
И, кстати, может, стоило бы запускать её с SW_SHOWMINIMIZED или даже SW_HIDE - раз уж "фоновое"

User avatar
zg
zero-gravity
Posts: 5651
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 114 times
Contact:

Фоновое копирование с помощью FastCopy

Post by zg » Mon 02 Dec, 2019 00:08

DV wrote:
Sun 01 Dec, 2019 21:46
4. Так вот, win.SearchPath не находит путь C:\Progs\FastCopy\FastCopy.exe, который я прописал в переменной %PATH% непосредственно перед запуском FAR !
а у вас точно FastCopy.exe имеет путь C:\Progs\FastCopy\FastCopy.exe\FastCopy.exe или всё таки C:\Progs\FastCopy\FastCopy.exe?

Post Reply

Return to “Обсуждение макросов”