Копирование списка относительных путей выбранных объектов
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Автоматизация Total Commander

#1: Копирование списка относительных путей выбранных объектов Author: ingerard PostPosted: Fri Dec 01, 2017 15:55
    —
Как скопировать относительные пути файлов/папок в режиме Branch? Это нужно для того чтоб работало нормально восстановление выделение файлов из буфера(cm_LoadSelectionFromClip). Ну и пример для лучшего понимания, есть файлы/папки с абсолютными путями:
d:\test\NO.BAR
d:\test\System.bar
d:\test\VERTICAL.BAR
d:\test\TCBL\Super_help.chm
d:\test\Plugins\arc\7za.dll
d:\test\Plugins\arc\Uha.exe
d:\test\Plugins\arc\Ace.key
d:\test\LANGUAGE\WCMD_RUS.LNG
d:\test\LANGUAGE\WCMD_RUS.MNU
d:\test\LANGUAGE\WCMD_RUS_org.MNU

После выполнения команды должно в буфере быть так:
NO.BAR
System.bar
VERTICAL.BAR
TCBL\Super_help.chm
Plugins\arc\7za.dll
Plugins\arc\Uha.exe
Plugins\arc\Ace.key
LANGUAGE\WCMD_RUS.LNG
LANGUAGE\WCMD_RUS.MNU
LANGUAGE\WCMD_RUS_org.MNU

И такая просьба, можно ли это сделать через какой-то плагин или посредством CMD? Чтоб было как-то более портативно.

#2:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri Dec 01, 2017 17:04
    —
ingerard
Плагинов такого типа не существует в принципе. Команд TC для копирования в буфер только относительных путей с отсечением начальной части — тоже. И почему вы думаете, что скопированное по такой методике потом удалось бы использовать для восстановленяи выделения?

#3:  Author: ingerard PostPosted: Fri Dec 01, 2017 17:38
    —
Avada
Ну потому что это работает, предварительно отсекаю в редакторе часть пути и команда - cm_LoadSelectionFromClip нормально выделяет. Очень плохо что она с полными путями не работает, не было бы таких костылей.

Есть плагин lst2clip, но как в него загружать путь текущего каталога активной панели... и потом функцией плагина "replace" отсекать эту часть.

#4:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri Dec 01, 2017 17:58
    —
ingerard
Безотносительно ко всяческим "как" List To Clipboard (lst2clip.exe) — не плагин, что даже по расширению видно. А как — разбирайтесь в документации, если получится. Мне показалось, что не выйдет. Но программа старая-престарая, 2003 года (хотя, видимо, для кого-то и полезная), я ей уже много лет не пользуюсь.
И, кстати, зачем вам это вообще надо, я, если честно, не понял. (Упоминание портативности ничего не прояснило. Выделение-то тут при чём?)


Last edited by Avada on Fri Dec 01, 2017 18:05; edited 1 time in total

#5:  Author: ingerard PostPosted: Fri Dec 01, 2017 18:05
    —
Avada
Да точно, ошибся. Уже пробовал разбираться, как написал выше не знаю как из тотала передать програмке текущий путь папки "d:\test\" из примера выше. Кстати встроенная команда "Сохранить выделение в файл" сохраняет пути точно как мне надо, но мне нужно не в файл, а в буфер.

#6:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri Dec 01, 2017 18:09
    —
ingerard
Принцип сохранения выделения в файл совсем другой. Так всё-таки, зачем это нужно?

#7:  Author: ingerard PostPosted: Fri Dec 01, 2017 18:18
    —
Avada
Ну есть такая необходимость в режиме без папок сохранять выделение в буфер и потом удачно его восстановить через время.

Объясните почему одна команда сохраняет по одному, а другая по другому

#8:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri Dec 01, 2017 18:48
    —
ingerard
Потому что задачи разные. При сохранении выделения в файл в штатном режиме вообще никаких путей нет, только имена, поскольку сохранение по умолчанию предлагается в тот же каталог, где что-то выделено (из него же потом и загружаться будет). И только в режиме файлов без подкаталогов указываются все пути относительно корня этой самой "ветви каталога" — опять же для успешного восстановления.
При копировании в буфер надобности заморачиваться будущей загрузкой выделения нет, ибо само такое копирование выполняется в большинстве случаев совсем с другими целями (поэтому, в частности, команда "Загрузить выделение из буфера" имеется, а "Сохранить выделение в буфер" — нет, используется результат действия команд 2017, 2018 или 2021).
И, между прочим, сохранение в буфер а) занимает на неопределённое время этот самый буфер, который может понадобиться с другой целью: б) не особо надёжно и в текущем-то сеансе TC, коль скоро содержимое буфера легко перезаписать самыми разными способами; в) даже при сохранности содержимого буфера перестанет загружаться после первого же перезапуска TC.
Пользуйтесь сохранением в файл. От добра добра не ищут.

#9:  Author: FlasherLocation: Москва PostPosted: Fri Dec 01, 2017 18:48
    —
ingerard
Для этого скрипта достаточно копировать имена.

#10:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Fri Dec 01, 2017 20:30
    —
ClipFileList
ClipListDialog

#11:  Author: FlasherLocation: Москва PostPosted: Fri Dec 01, 2017 20:58
    —
Вахмурка
Так копирование делается не для того, чтобы было, а конкретно для восстановления выделения. Поэтому логично копировать обычные имена стандартной командой, пользоваться моим скриптом и не париться с режимами.

#12:  Author: ingerard PostPosted: Sat Dec 02, 2017 00:15
    —
Flasher wrote:
Для этого скрипта достаточно копировать имена.

Если среди файлов будут одинаковые имена и они будут в разных папках, то выделит все, что не допустимо, и через скрипт очень долго тупит если элементов много.

Avada
Конечно у каждого свое виденье какие нужны функции в тотале, а какие нет... Но мне было бы удобно работать именно с буфером, это как-то быстрее чем в файлы сохранять. Ну и буфер обмена у меня сам собой не живет и потерь неожиданных не случалось.

Вахмурка
Спасибо, но для поверпро вроде надо доустанавливать модули, можно что-то подобное на vbs?

#13:  Author: FlasherLocation: Москва PostPosted: Sat Dec 02, 2017 01:08
    —
ingerard wrote:
Если среди файлов будут одинаковые имена и они будут в разных папках, то выделит все, что не допустимо
Да, не всегда требуется, согласен. Это, в принципе, легко поправимо, но...
ingerard wrote:
и через скрипт очень долго тупит если элементов много.
Не думаю, что отправка в буфер по совокупности с последующим восстановлением окажется быстрее:
Code:
'======================= VBS ======================
' Скопировать относительные пути выбранных объектов
' Условие: требуется компонент TCScript.dll
'==================================================
With CreateObject("TCScript.Helper")
  .Pause = 0 : .Wait = True : .NoArrayReturn = True
  Sel = .GetSrcSelectedFiles(1) : P = .GetInfo("SP")
  If P <> "" Then
    If Right(P, 1) <> "\" Then P = P & "\"
    If .INIRead(.MainINI, "Configuration", "DrivesExportUpcase", -1) _
    < 1 Then P = LCase(Left(P, 1)) & Mid(P, 2)
    Sel = Replace(Sel, P, "")
  End If : .SetTextToClip Sel
End With
Либо:
Code:
'======================= VBS ======================
' Скопировать относительные пути выбранных объектов
' Параметры: %WL "%P"%Z
'==================================================
Set A = WSH.Arguments : If A.Count = 0 Then WSH.Quit
With CreateObject("Scripting.FileSystemObject")
  All = .OpenTextFile(A(0),,,-1).ReadAll
  .OpenTextFile(A(0),2,,-1).Write vbCr & Replace(All, .BuildPath(A(1), "\"), "")
End With
CreateObject("WScript.Shell").Run "%ComSpec% /c clip<" & A(0), 0


Last edited by Flasher on Mon Dec 04, 2017 02:14; edited 9 times in total

#14:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Sat Dec 02, 2017 01:33
    —
Quote:
Спасибо, но для поверпро вроде надо доустанавливать модули
Модули не модули, один плагин ini не входит в стандартную поставку. Скачал да записал
Quote:
можно что-то подобное на vbs?
Конечно, можно Wink

#15:  Author: ingerard PostPosted: Sat Dec 02, 2017 10:22
    —
Flasher
Круто! Второй скрипт работает, но в начало всего текста он добавляет бяку(EF BB BF(Byte Order Mark)), из-за которой первый элемент не может быть выделен.

Quote:
Не думаю, что отправка в буфер по совокупности с последующим восстановлением окажется быстрее

Я сравнивал по скорости, то встроенная команда восстанавливает выделение моментально.

Вахмурка
А можно выложить на другой обменник? В Украине недоступен Яндекс.

#16:  Author: FlasherLocation: Москва PostPosted: Sat Dec 02, 2017 10:43
    —
ingerard
А первый как будто нет? Wink Тем более, что он быстрее.
От ВОМ избавиться можно, но, для восстановления необязательно. Отделил возвратом каретки.
Quote:
Я сравнивал по скорости, то встроенная команда восстанавливает выделение моментально.
Я пишу "по совокупности", а не отдельно.

#17:  Author: ingerard PostPosted: Sat Dec 02, 2017 11:10
    —
Quote:
А первый как будто нет? Wink Тем более, что он быстрее.


А для первого скрипта нужна регистрация библиотек насколько я понял Sad

#18:  Author: FlasherLocation: Москва PostPosted: Sat Dec 02, 2017 11:18
    —
Наличие, а не регистрация. И почему вдруг во множественном числе?
ingerard wrote:
насколько я понял
Интересно, а как же без теста было понято это?:
ingerard wrote:
и через скрипт очень долго тупит если элементов много.

#19:  Author: ingerard PostPosted: Sat Dec 02, 2017 11:56
    —
Quote:
Наличие, а не регистрация. И почему вдруг во множественном числе?

Я пробовал подкидывать в разные места "готовую сборку для TCHelper", но все равно выкидывает ошибку при запуске скрипта.

Quote:
Интересно, а как же без теста было понято это?

Если насчет простого копирования имен, то был не прав, с этим скрипт справляется быстро, а вот если по скрипту восстанавливать выделение, то думает прилично.

#20:  Author: FlasherLocation: Москва PostPosted: Sat Dec 02, 2017 17:16
    —
ingerard wrote:
Я пробовал подкидывать в разные места
Что значит "в разные места"? Нужно делать по инструкции. За доп. вопросами сюда.
ingerard wrote:
а вот если по скрипту восстанавливать выделение, то думает прилично.
По какому скрипту? Если до сих пор не получилось правильно прикрутить библиотеку.

#21:  Author: Zmy PostPosted: Sat Dec 02, 2017 18:21
    —
ingerard, я написал программу, которая подходит под вашу задачу.
Хотите её попробовать?

#22:  Author: FlasherLocation: Москва PostPosted: Sat Dec 02, 2017 19:41
    —
ingerard
В ЛС загляните.

#23:  Author: ingerard PostPosted: Sat Dec 02, 2017 20:37
    —
Quote:
За доп. вопросами сюда.

Ок, испробую.

Quote:
По какому скрипту? Если до сих пор не получилось правильно прикрутить библиотеку.

Ну по скрипту который не использует TCHelper.

И насчет второго скрипта, бывают моменты, что он не копирует в буфер, пока не могу понять в какой именно момент и что ему не нрав...

#24:  Author: FlasherLocation: Москва PostPosted: Sat Dec 02, 2017 20:59
    —
ingerard wrote:
Ну по скрипту который не использует TCHelper.
А как можно было проверить его в совокупности с восстановлением?
ingerard wrote:
пока не могу понять в какой именно момент
Список выделенного нужен, чтобы понять.

#25:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Sat Dec 02, 2017 22:33
    —
ingerard wrote:
А можно выложить на другой обменник? В Украине недоступен Яндекс.
Во-первых, я давал ссылки не на обменник, а на мою страничку, расположенную на том же сайте, который ты в данный момент читаешь. Ее адрес: http://powerpro.wincmd.ru. Да, у меня есть страничка и на Яндексе, но на нее я ссылку и не давал.
Во-вторых, если с незалежной и эта страничка недоступна, попробуй http://ppro.totalcmd.net, хотя это тот же хост, что wincmd.ru, насколько мне известно (?)

#26:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Dec 02, 2017 23:11
    —
Вахмурка
Имелась в виду ссылка здесь.

#27:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Sat Dec 02, 2017 23:20
    —
Ясно. ingerard, а сразу нельзя было сказать?
Давайте так попробуем. Вдруг получится?

#28:  Author: ingerard PostPosted: Sun Dec 03, 2017 01:44
    —
Flasher
Скрипт не работает внутри архивов Sad Можно ли как-то обыграть?
Вахмурка
Злой вы какой-то, какую ссылку предоставили изначально, за такую и говорилось.

#29:  Author: FlasherLocation: Москва PostPosted: Sun Dec 03, 2017 02:29
    —
ingerard
Обыграл.

#30:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Sun Dec 03, 2017 10:27
    —
2ingerard
Надо было просто сказать: положи, мол, плагин ini на любой ресурс, отличный от яндекса.
Так что в итоге? Скачалось? Запустилось? Работает? Устраивает?

#31:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Dec 03, 2017 19:24
    —
С учётом прошедшего обсуждения тема переносится в "Автоматизацию" с некоторым уточнением её названия.

#32:  Author: ingerard PostPosted: Sun Dec 03, 2017 21:45
    —
Flasher
Еще проблемка вылезла, в архиве, в режиме без подкаталогов копирует только имена файлов, без каталогов в которых они находятся. Может с помощью TCFS2 сделать вызов команды cm_CopyFullNamesToClip и уже в буфере отрезать часть? И будет везде нормально работать. Поможете?

Вахмурка
Скачал, но еще не проверял. Пробую пока что vbs скрипт. И я так и не понял, я смогу ваш скрипт на PowerPro запустить по другой системой на флешке и загрузочной системе LiveCD?

#33:  Author: FlasherLocation: Москва PostPosted: Sun Dec 03, 2017 21:59
    —
ingerard
Это баг ТС. Он не передаёт в списки подкаталоги архива. Используйте первый скрипт.

#34:  Author: ingerard PostPosted: Sun Dec 03, 2017 22:40
    —
Flasher
А первый скрипт нормально не работает из-за того что в параметрах "%P"%Z передается буква диска в верхнем регистре, а в функции GetSrcSelectedFiles в нижнем, поэтому нормально не находить что нужно отрезать.

#35:  Author: FlasherLocation: Москва PostPosted: Sun Dec 03, 2017 22:49
    —
ingerard
В секции Configuration wincmd.ini присвойте 1 ключу DrivesExportUpcase и перезапустите ТС.

#36:  Author: ingerard PostPosted: Sun Dec 03, 2017 23:05
    —
Flasher
Сколько же нюансов в этом тотале... Спасибо, заработало!

#37:  Author: FlasherLocation: Москва PostPosted: Mon Dec 04, 2017 02:16
    —
ingerard
Убрал зависимость и параметры. Можно во всех режимах пользоваться (стандартный, результаты поиска, без подкаталогов).

#38:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Mon Dec 04, 2017 09:49
    —
ingerard wrote:
И я так и не понял, я смогу ваш скрипт на PowerPro запустить по другой системой на флешке и загрузочной системе LiveCD?
Звучит так, как будто мы битый час об этом говорили, и как будто об этом было сказано с самого начала... Smile
Не знаю, не пробовал, но думаю, что нет. Иными словами, портабельностью программа PowerPro не снабжена. Должно же в ней чего-то не быть!

#39:  Author: ingerard PostPosted: Mon Dec 04, 2017 10:22
    —
Вахмурка
Я с самого начала это озвучил Smile

Quote:
И такая просьба, можно ли это сделать через какой-то плагин или посредством CMD? Чтоб было как-то более портативно.


Flasher
С каждым разом все лучше и лучше! Smile

#40:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Mon Dec 04, 2017 10:33
    —
ingerard wrote:
И такая просьба, можно ли это сделать через какой-то плагин или посредством CMD? Чтоб было как-то более портативно
Просьба - не условие. И "более портативно" - это вообще бессмыслица. Портативно - это значит пришел, вставил флешку/диск, поработал, вынул и ушел, и все осталось как до прихода. "Более портативно" - это типа "немножечко нагадил в реестр"?
В описании PowerPro разве хоть слово про портативность есть? Зачем тогда просил переложить плагин? Или этот сайт тоже недоступен с Украины? Нельзя было сначала хотя бы самому понять цель?
На будущее - хочешь, чтобы тебе помогли - ставь задачу сразу четко и определенно.
Ладно, вопрос закрыт. Ты, кажется, уже нашел решение...

#41:  Author: FlasherLocation: Москва PostPosted: Mon Dec 04, 2017 11:00
    —
 2Вахмурка



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group