View previous topic :: View next topic |
Author |
Message |
Dimsok
Joined: 17 Aug 2014 Posts: 663
|
(Separately) Posted: Wed May 02, 2018 01:10 Post subject: Копирование базовых имён выбранных объектов в буфер обмена |
|
|
Имеется нужда в скрипте для копирования имён выделенных элементов в буфер обмена, т.е аналогично cm_CopyNamesToClip, но без расширений. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed May 02, 2018 01:20 Post subject: |
|
|
Code: | '==================== VBS ==================
' Скопировать выбранные имена без расширений
' Параметры: %Z%WF
' Ключ /n оставляет "\" на конце имён папок
'===========================================
If WSH.Arguments.Count Then List = WSH.Arguments(0) Else WSH.Quit
Ex = "]+$" : Set FSO = CreateObject("Scripting.FileSystemObject")
If WSH.Arguments.Named.Exists("n") Then Ex = "\\]+(?=\\|$)"
With New RegExp
.Global = True : .MultiLine = True : .Pattern = "\n$|\.[^.\n" & Ex
All = .Replace(FSO.OpenTextFile(List,,,-1).ReadAll, "")
End With
With CreateObject("SAPI.SpFileStream")
.Format.Type = 1 : .Open List, 3 : .Write All : .Close
End With
CreateObject("WScript.Shell").Run "%ComSpec% /c clip<" & List, 0 |
_________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Last edited by Flasher on Wed May 23, 2018 19:34; edited 3 times in total |
|
Back to top |
|
 |
Dimsok
Joined: 17 Aug 2014 Posts: 663
|
(Separately) Posted: Wed May 02, 2018 01:28 Post subject: |
|
|
Спасибо. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun May 20, 2018 04:29 Post subject: |
|
|
Dimsok
Поправил один косяк. Имена без расширений вырезались.
И ещё вопрос, который я, откровенно говоря, продинамил. Имена папок копируются с \ на конце. Это же условие для восстановление из буфера. Получается, если мы отрезаем .ext\, то остаются базовые имена без \. Так как в данном случае верно поступать? Заботиться о восстановлении выделения папок без .ext или оставить как есть, подразумевая, что это могут быть имена файлов? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
Dimsok
Joined: 17 Aug 2014 Posts: 663
|
(Separately) Posted: Wed May 23, 2018 02:46 Post subject: |
|
|
Опять же в зависимости от нужд. Можно иметь 2 варианта, либо добавить опцию в один скрипт. Команда TC "Копировать имена файлов в буфер" тоже копирует имена папок с "\". |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed May 23, 2018 14:40 Post subject: |
|
|
Dimsok
Она именно поэтому и копирует, чтобы можно было восстановить выделение папок.
Но вопрос в том, когда это вообще может понадобиться? Где требуется восстанавливать выделение папок без расширений?
С другой стороны, вариант c удалением .ext\ оставляет \ у папок, не имевших '.ext'. Получается ни то ни сё.
Ключ я добавил, но вопросы остались открытыми.
P.S.: Сразу не мог ответить. На форуме антиспам-сбой произошёл, посты не отправлялись. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
Monarch-LFV

Joined: 22 Jul 2019 Posts: 344
|
(Separately) Posted: Sun Oct 12, 2025 12:11 Post subject: |
|
|
Подниму тему, просто столкнулся с проблемой, что предложенная в соседней ветке команда копирования имен папок и файлов "lists=%Z%UL||##path<4>" имеет ряд недостатков:
1. Очень долго работает когда количество файлов и папок огромно (тест проводил на 50 000 файлов и 4000 папок, операция длится где-то секунд 30)
2. Неправильно обрабатывает файлы с несколькими точками в конце "имя файла 12.10.2025 г..txt" => "имя файла 12.10.2025 г" (одна точка теряется)
3. неправильно отрабатывает имена начинающиеся с точки например файл ".gitignore" => "" (ничего, так как посчитал имя расширением).
Посему решил написать скрипт VBS, и вообще отойти от понятия файлов и папок, а рассматривать и обрабатывать имена как единый текстовый массив:
 Copy_Filename_And_Foldername.vbs Code: | ' Скопировать имена папок и файлов без расширений
' Параметры: %Z%WF
On Error Resume Next
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
Set objRegEx = CreateObject("VBScript.RegExp")
List=FSO.OpenTextFile(WScript.Arguments(0),,,-1).ReadAll
if err.number<>0 then msgbox "Не выделено ни одного элемента": wscript.quit
List=replace(List, vbcrlf, "*")
With objRegEx
.Pattern = "([^\*\\]+?\\?)(\.[^\*\.\\]+)?\*"
.Global = true
Text = .replace(List, "$1" & vbcrlf)
End With
Text=replace(Text, "\", "")
Text=left(Text, len(Text)-2)
'=== Возможная автозамена, например, " - " на TAB для вставки в Excel, или "_" на " "
' Text=replace(Text, " - ", chr(9))
' Text=replace(Text, "_", " ")
'=============================================================
CopyToClip_UTF8_without_BOM(Text)
' WshShell.Popup "Имена скопированы", 1, "", vbOkonly
Set FSO = Nothing
Set WshShell = Nothing
Set objRegEx = Nothing
sub CopyToClip_UTF8_without_BOM(MultiLine_text)
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
tmpclp = WshShell.ExpandEnvironmentStrings("%temp%") & "\~$Clipboard.txt"
If FSO.fileExists(tmpclp) then FSO.DeleteFile tmpclp
with CreateObject("ADODB.Stream")
.Charset = "utf-8"
.Type = 2
.Open
.WriteText MultiLine_text
.Position = 0
.Type = 1
.Position = 3
data = .Read
.close
.open
.Write data
.SaveToFile tmpclp, 1
.Close
end with
WshShell.Run "cmd /c chcp 65001&&type " & tmpclp & "| clip", 0, True
FSO.DeleteFile tmpclp
end sub |
По итогу:
1. Время копирования имен 50 000 файлов и 4000 папок = 0,17 сек
2. точки в конце имен файлов сохраняются
3. Имена файлов, начинающиеся с точки сохраняются.
4. Плюс закомментированные строки в середине скрипта на случай, если потребуется некая обработка (замена) чего-либо.
Вдруг кому пригодится  |
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|