Копирование списка относительных путей выбранных объектов

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

ingerard
Сообщения: 128
Зарегистрирован: Вс дек 04, 2016 21:51

Копирование списка относительных путей выбранных объектов

Сообщение ingerard »

Как скопировать относительные пути файлов/папок в режиме 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? Чтоб было как-то более портативно.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

ingerard
Плагинов такого типа не существует в принципе. Команд TC для копирования в буфер только относительных путей с отсечением начальной части — тоже. И почему вы думаете, что скопированное по такой методике потом удалось бы использовать для восстановленяи выделения?
Даже самая богатая фантазия
Не представит себе наши безобразия.
ingerard
Сообщения: 128
Зарегистрирован: Вс дек 04, 2016 21:51

Сообщение ingerard »

Avada
Ну потому что это работает, предварительно отсекаю в редакторе часть пути и команда - cm_LoadSelectionFromClip нормально выделяет. Очень плохо что она с полными путями не работает, не было бы таких костылей.

Есть плагин lst2clip, но как в него загружать путь текущего каталога активной панели... и потом функцией плагина "replace" отсекать эту часть.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

ingerard
Безотносительно ко всяческим "как" List To Clipboard (lst2clip.exe) — не плагин, что даже по расширению видно. А как — разбирайтесь в документации, если получится. Мне показалось, что не выйдет. Но программа старая-престарая, 2003 года (хотя, видимо, для кого-то и полезная), я ей уже много лет не пользуюсь.
И, кстати, зачем вам это вообще надо, я, если честно, не понял. (Упоминание портативности ничего не прояснило. Выделение-то тут при чём?)
Последний раз редактировалось Avada Пт дек 01, 2017 17:05, всего редактировалось 1 раз.
Даже самая богатая фантазия
Не представит себе наши безобразия.
ingerard
Сообщения: 128
Зарегистрирован: Вс дек 04, 2016 21:51

Сообщение ingerard »

Avada
Да точно, ошибся. Уже пробовал разбираться, как написал выше не знаю как из тотала передать програмке текущий путь папки "d:\test\" из примера выше. Кстати встроенная команда "Сохранить выделение в файл" сохраняет пути точно как мне надо, но мне нужно не в файл, а в буфер.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

ingerard
Принцип сохранения выделения в файл совсем другой. Так всё-таки, зачем это нужно?
Даже самая богатая фантазия
Не представит себе наши безобразия.
ingerard
Сообщения: 128
Зарегистрирован: Вс дек 04, 2016 21:51

Сообщение ingerard »

Avada
Ну есть такая необходимость в режиме без папок сохранять выделение в буфер и потом удачно его восстановить через время.

Объясните почему одна команда сохраняет по одному, а другая по другому
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

ingerard
Потому что задачи разные. При сохранении выделения в файл в штатном режиме вообще никаких путей нет, только имена, поскольку сохранение по умолчанию предлагается в тот же каталог, где что-то выделено (из него же потом и загружаться будет). И только в режиме файлов без подкаталогов указываются все пути относительно корня этой самой "ветви каталога" — опять же для успешного восстановления.
При копировании в буфер надобности заморачиваться будущей загрузкой выделения нет, ибо само такое копирование выполняется в большинстве случаев совсем с другими целями (поэтому, в частности, команда "Загрузить выделение из буфера" имеется, а "Сохранить выделение в буфер" — нет, используется результат действия команд 2017, 2018 или 2021).
И, между прочим, сохранение в буфер а) занимает на неопределённое время этот самый буфер, который может понадобиться с другой целью: б) не особо надёжно и в текущем-то сеансе TC, коль скоро содержимое буфера легко перезаписать самыми разными способами; в) даже при сохранности содержимого буфера перестанет загружаться после первого же перезапуска TC.
Пользуйтесь сохранением в файл. От добра добра не ищут.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

ingerard
Для этого скрипта достаточно копировать имена.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Вахмурка
Так копирование делается не для того, чтобы было, а конкретно для восстановления выделения. Поэтому логично копировать обычные имена стандартной командой, пользоваться моим скриптом и не париться с режимами.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
ingerard
Сообщения: 128
Зарегистрирован: Вс дек 04, 2016 21:51

Сообщение ingerard »

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

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

Вахмурка
Спасибо, но для поверпро вроде надо доустанавливать модули, можно что-то подобное на vbs?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

ingerard писал(а):Если среди файлов будут одинаковые имена и они будут в разных папках, то выделит все, что не допустимо
Да, не всегда требуется, согласен. Это, в принципе, легко поправимо, но...
ingerard писал(а):и через скрипт очень долго тупит если элементов много.
Не думаю, что отправка в буфер по совокупности с последующим восстановлением окажется быстрее:

Код: Выделить всё

'======================= 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
Либо:

Код: Выделить всё

'======================= 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
Последний раз редактировалось Flasher Пн дек 04, 2017 01:14, всего редактировалось 9 раз.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Спасибо, но для поверпро вроде надо доустанавливать модули
Модули не модули, один плагин ini не входит в стандартную поставку. Скачал да записал
можно что-то подобное на vbs?
Конечно, можно ;)
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
ingerard
Сообщения: 128
Зарегистрирован: Вс дек 04, 2016 21:51

Сообщение ingerard »

Flasher
Круто! Второй скрипт работает, но в начало всего текста он добавляет бяку(EF BB BF(Byte Order Mark)), из-за которой первый элемент не может быть выделен.
Не думаю, что отправка в буфер по совокупности с последующим восстановлением окажется быстрее
Я сравнивал по скорости, то встроенная команда восстанавливает выделение моментально.

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