Идея для фонового копирования выделенных элементов (через robocopy, для пользовательского меню)

Здесь обсуждается всё, что касается макросов.
Post Reply
S.A.
Posts: 55
Joined: Mon 17 Nov, 2014 19:52
Been thanked: 6 times

Идея для фонового копирования выделенных элементов (через robocopy, для пользовательского меню)

Post by S.A. »

Вроде бы готовых вариантов не было — предложу то, что соорудил для себя.

Путь назначения — пассивная панель. Работает согласно логике метасимвола !& (выделенные элементы или элемент под курсором, если ничего не выделено).

Попробовал несколько вариантов — выкладываю все в виде демо одним пунктом пользовательского меню (работает для обычной и временной панелей).

robocopy — базовый вариант
options — позволяет задать опции отдельно для файлов и папок
separate — то же самое, что options, но запускает отдельно два процесса для файлов и папок

Нюанс: при копировании большого количества элементов, особенно с временной панели, будет ошибка "The command line is too long". Для примера: из system32 можно скопировать около 440 файлов, с временной панели (для system32) — около 200. Сооружение для этого и не предназначено, конечно, и для таких случаев логичнее создать папку, скинуть туда симлинки на все выделенное/найденное/нужное (Alt+F6), и уже потом скопировать ее.

/A-:SH нужен для того, чтобы унять баг robocopy, из-за которого через три раза на пятый папка назначения становится скрытой

Code: Select all

c:   robocopy
{
c:   robocopy
     lua:if panel.GetPanelPrefix(handle, 1)=='tmp' then Keys('F2 c # 2') else Keys('F2 c # 1') end
o:   robocopy options
     lua:if panel.GetPanelPrefix(handle, 1)=='tmp' then Keys('F2 c # 4') else Keys('F2 c # 3') end
s:   separate
     lua:if panel.GetPanelPrefix(handle, 1)=='tmp' then Keys('F2 c # 6') else Keys('F2 c # 5') end
--:
#:   internal
{
1:   robocopy
     @start /MIN "rbcp" cmd /C pushd !^"!\" ^&^& (for %i in (!&) do @echo %~ai ^| findstr "d" ^&^& robocopy %i !#"!\\%~nxi" /E /Z /A-:SH /NP ^|^| robocopy !^"!\\" !#"!\\" !^%i /Z /A-:SH /NP) 1^>^>!#"!\rbcplog" 2^>^&1 ^& popd
2:   robocopy temp
     @start /MIN "rbcpt" cmd /C (for %i in (!&) do @echo %~ai ^| findstr "d" ^&^& robocopy !^%i !#"!\\%~nxi" /E /Z /A-:SH /NP ^|^| robocopy !^"%~pi\" !#"!\\" !^"%~nxi" /Z /A-:SH /NP) 1^>^>!#"!\rbcplog" 2^>^&1
3:   options
     @start /MIN "rbcp" cmd /C pushd !^"!\" ^&^& (for %i in (!&) do @echo %~ai ^| findstr "d" ^&^& robocopy %i !#"!\\%~nxi" !?$rbcpd$dirs?/Z /E /A-:SH! /NP ^|^| robocopy !^"!\\" !#"!\\" !^%i !?$rbcpf$files?/Z /A-:SH! /NP) 1^>^>!#"!\rbcplog" 2^>^&1 ^& popd
4:   options temp
     @start /MIN "rbcpt" cmd /C (for %i in (!&) do @echo %~ai ^| findstr "d" ^&^& robocopy !^%i !#"!\\%~nxi" !?$rbcpd$dirs?/Z /E /A-:SH! /NP ^|^| robocopy !^"%~pi\" !#"!\\" !^"%~nxi" !?$rbcpf$files?/Z /A-:SH! /NP) 1^>^>!#"!\rbcplog" 2^>^&1 ^& popd
5:   separate
     @start /MIN "rbcpf" cmd /C pushd !^"!\" ^&^& (for %i in (!&) do @echo %~ai ^| findstr /V "d" ^&^& robocopy !^"!\\" !#"!\\" !^%i !?$rbcpf$files?/Z /A-:SH! /NP) 1^>^>!#"!\rbcpfiles" 2^>^&1 ^& popd
     @start /MIN "rbcpd" cmd /C pushd !^"!\" ^&^& (for %i in (!&) do @echo %~ai ^| findstr "d" ^&^& robocopy %i !#"!\\%~nxi" !?$rbcpd$dirs?/Z /E /A-:SH! /NP) 1^>^>!#"!\rbcpdirs" 2^>^&1 ^& popd
6:   separate temp
     @start /MIN "rbcpf" cmd /C (for %i in (!&) do @echo %~ai ^| findstr /V "d" ^&^& robocopy !^"%~pi\" !#"!\\" !^"%~nxi" !?$rbcpf$files?/Z /A-:SH! /NP) 1^>^>!#"!\rbcpfiles" 2^>^&1
     @start /MIN "rbcpd" cmd /C (for %i in (!&) do @echo %~ai ^| findstr "d" ^&^& robocopy !^%i !#"!\\%~nxi" !?$rbcpd$dirs?/Z /E /A-:SH! /NP) 1^>^>!#"!\rbcpdirs" 2^>^&1
}
}
UPD: Говоря о готовых вариантах, которых я не встречал, я имел в виду только robocopy.
Дополнил демо для совместимости с UNC путями.
Last edited by S.A. on Fri 09 Oct, 2020 13:43, edited 4 times in total.
User avatar
citRiks
Posts: 1426
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 435 times
Been thanked: 90 times

Идея для фонового копирования выделенных элементов (через robocopy, для пользовательского меню)

Post by citRiks »

2useven10,
такое есть, но продемострированное аффтором мастерство с юзерменю + robocopy заслуживает публикации,
я себе взял на заметку отсюдова, хотя и с ФастКопи из вами упомянутой темы я давно дружу тоже.
контекстный поиск услужливо подсказывает вот эту обзорную тему:
Спoсобы фонового копирования (background copy) в FAR
viewtopic.php?f=4&t=11895
Last edited by citRiks on Tue 29 Sep, 2020 11:46, edited 2 times in total.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
Post Reply

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