Страница 1 из 3
Копирование списка относительных путей выбранных объектов
Добавлено: Пт дек 01, 2017 14:55
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? Чтоб было как-то более портативно.
Добавлено: Пт дек 01, 2017 16:04
Avada
ingerard
Плагинов такого типа не существует в принципе. Команд TC для копирования в буфер только относительных путей с отсечением начальной части — тоже. И почему вы думаете, что скопированное по такой методике потом удалось бы использовать для восстановленяи выделения?
Добавлено: Пт дек 01, 2017 16:38
ingerard
Avada
Ну потому что это работает, предварительно отсекаю в редакторе часть пути и команда - cm_LoadSelectionFromClip нормально выделяет. Очень плохо что она с полными путями не работает, не было бы таких костылей.
Есть плагин lst2clip, но как в него загружать путь текущего каталога активной панели... и потом функцией плагина "replace" отсекать эту часть.
Добавлено: Пт дек 01, 2017 16:58
Avada
ingerard
Безотносительно ко всяческим "как" List To Clipboard (lst2clip.exe) — не плагин, что даже по расширению видно. А как — разбирайтесь в документации, если получится. Мне показалось, что не выйдет. Но программа старая-престарая, 2003 года (хотя, видимо, для кого-то и полезная), я ей уже много лет не пользуюсь.
И, кстати, зачем вам это вообще надо, я, если честно, не понял. (Упоминание портативности ничего не прояснило. Выделение-то тут при чём?)
Добавлено: Пт дек 01, 2017 17:05
ingerard
Avada
Да точно, ошибся. Уже пробовал разбираться, как написал выше не знаю как из тотала передать програмке текущий путь папки "d:\test\" из примера выше. Кстати встроенная команда "Сохранить выделение в файл" сохраняет пути точно как мне надо, но мне нужно не в файл, а в буфер.
Добавлено: Пт дек 01, 2017 17:09
Avada
ingerard
Принцип сохранения выделения в файл совсем другой. Так всё-таки, зачем это нужно?
Добавлено: Пт дек 01, 2017 17:18
ingerard
Avada
Ну есть такая необходимость в режиме без папок сохранять выделение в буфер и потом удачно его восстановить через время.
Объясните почему одна команда сохраняет по одному, а другая по другому
Добавлено: Пт дек 01, 2017 17:48
Avada
ingerard
Потому что задачи разные. При сохранении выделения в файл в штатном режиме вообще никаких путей нет, только имена, поскольку сохранение по умолчанию предлагается в тот же каталог, где что-то выделено (из него же потом и загружаться будет). И только в режиме файлов без подкаталогов указываются все пути относительно корня этой самой "ветви каталога" — опять же для успешного восстановления.
При копировании в буфер надобности заморачиваться будущей загрузкой выделения нет, ибо само такое копирование выполняется в большинстве случаев совсем с другими целями (поэтому, в частности, команда "Загрузить выделение из буфера" имеется, а "Сохранить выделение в буфер" — нет, используется результат действия команд 2017, 2018 или 2021).
И, между прочим, сохранение в буфер а) занимает на неопределённое время этот самый буфер, который может понадобиться с другой целью: б) не особо надёжно и в текущем-то сеансе TC, коль скоро содержимое буфера легко перезаписать самыми разными способами; в) даже при сохранности содержимого буфера перестанет загружаться после первого же перезапуска TC.
Пользуйтесь сохранением в файл. От добра добра не ищут.
Добавлено: Пт дек 01, 2017 17:48
Flasher
ingerard
Для
этого скрипта достаточно копировать имена.
Добавлено: Пт дек 01, 2017 19:30
Вахмурка
Добавлено: Пт дек 01, 2017 19:58
Flasher
Вахмурка
Так копирование делается не для того, чтобы было, а конкретно для восстановления выделения. Поэтому логично копировать обычные имена стандартной командой, пользоваться моим скриптом и не париться с режимами.
Добавлено: Пт дек 01, 2017 23:15
ingerard
Flasher писал(а):Для этого скрипта достаточно копировать имена.
Если среди файлов будут одинаковые имена и они будут в разных папках, то выделит все, что не допустимо, и через скрипт очень долго тупит если элементов много.
Avada
Конечно у каждого свое виденье какие нужны функции в тотале, а какие нет... Но мне было бы удобно работать именно с буфером, это как-то быстрее чем в файлы сохранять. Ну и буфер обмена у меня сам собой не живет и потерь неожиданных не случалось.
Вахмурка
Спасибо, но для поверпро вроде надо доустанавливать модули, можно что-то подобное на vbs?
Добавлено: Сб дек 02, 2017 00:08
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
Добавлено: Сб дек 02, 2017 00:33
Вахмурка
Спасибо, но для поверпро вроде надо доустанавливать модули
Модули не модули, один плагин
ini не входит в стандартную поставку. Скачал да записал
можно что-то подобное на vbs?
Конечно, можно

Добавлено: Сб дек 02, 2017 09:22
ingerard
Flasher
Круто! Второй скрипт работает, но в начало всего текста он добавляет бяку(EF BB BF(Byte Order Mark)), из-за которой первый элемент не может быть выделен.
Не думаю, что отправка в буфер по совокупности с последующим восстановлением окажется быстрее
Я сравнивал по скорости, то встроенная команда восстанавливает выделение моментально.
Вахмурка
А можно выложить на другой обменник? В Украине недоступен Яндекс.