Page 1 of 3

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

Posted: Sat 16 Nov, 2019 19:23
by DV
Поскольку плагин Background Copy не развивается, а необходимость копирования в фоне есть, было принято волевое решение реализовать копирование в фоне с помощью макроса.
Особенности данного макроса:
  1. Код данного макроса базируется на макросах Plugin_FastCopy & Plugin_TeraCopy (C) SimSU
  2. Почему именно FastCopy? Потому что это "рабочая лошадка", невзирая на его невзрачный внешний вид. TeraCopy выглядит гораздо приятнее, но при копировании файлов порой возникают проблемы. Это неприемлемо.
Сам макрос, версия 1.4.0:


Он же:
Plugin.FastCopy.1.4.0.7z
(3.83 KiB) Downloaded 163 times

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

Posted: Sun 17 Nov, 2019 01:50
by HaRT
 ! Message from: HaRT
Тема перенесена, поскольку была создана в нарушение правил раздела.

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

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

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

Code: Select all

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

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

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

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

Posted: Tue 19 Nov, 2019 14:36
by stefanenko
Ну и еще небольшой момент.
К примеру если копировать папку C:\1 в диск C:\ то автоматически создастся копия папки с именем C:\1(1)
Такая себе услуга от программы.

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

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

Posted: Sat 23 Nov, 2019 22:40
by Xerox
Так ведь и не работает с пробелами в имени файлов

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

Posted: Sun 24 Nov, 2019 00:39
by Xerox
Привожу свой исправленный вариант, проблема с пробелами починена

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

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

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

Posted: Sun 24 Nov, 2019 20:10
by Xerox
DV, Давай, дерзай :)
я сделал тут (не очень глубокий) обзор, и пока мне кажется что этот твой путь наиболее перспективный для копирования

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

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

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

Posted: Sun 01 Dec, 2019 18:20
by DV
Версия 1.3 - в диалоги подтверждения добавлена кнопка [FastCopy...], а также добавлены "горячие клавиши" для всех кнопок.
Кнопка [FastCopy...] показывает окно FastCopy без автоматического запуска операций над файлами. Это полезно для изменения настроек FastCopy, редактирования списка переданных файлов или отмены операции.

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

Posted: Sun 01 Dec, 2019 20:29
by buniak_a_h
Сразу для следующей версии:
после строки 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%, обойтись без настройки (которой, кстати, я в макросе не нашёл).

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

Posted: Sun 01 Dec, 2019 21:27
by buniak_a_h
Ещё несколько замечаний:
  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++) программы

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

Posted: Sun 01 Dec, 2019 21:46
by DV
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

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

Posted: Sun 01 Dec, 2019 22:13
by buniak_a_h
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 - раз уж "фоновое"