Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Вставка содержимого буфера в новый файл (текст/изображениe)
Goto page Previous  1, 2, 3, 4, 5, 6, 7
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
HEXFIX



Joined: 25 Jun 2010
Posts: 143
Location: Калининград

Post (Separately) Posted: Fri Apr 05, 2019 21:09    Post subject: Reply with quote

Прошу помощи.
Использую вот такой скрипт
Code:
Option Explicit
Dim FileName
'========== Изменяемые параметры =======================
FileName = "Новый файл.txt" 'Имя создаваемого файла
'=======================================================
Dim TCS, Clip, Btn, FSO, OTL, Mess, Title
Set TCS = CreateObject("TCScript.Helper")
Clip = TCS.GetTextFromClip
Set TCS = Nothing
 
If Len(Clip) > 0 Then
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FileExists(FileName) Then
Mess = "Буфер обмена содержит текст." & vbNewLine & _
"Заменить содержимое файла " & FileName & _
" текстом из буфера обмена?" & vbNewLine
Title = "Замена содержимого файла"
Else
Mess = "Буфер обмена содержит текст." & vbNewLine & _
"Создать файл " & FileName & _
" с содержимым буфера обмена?" & vbNewLine
Title = "Создание текстового файла"
End If
Btn = MsgBox(Mess, vbYesNo + vbQuestion, Title)
If Btn = 7 Then 'Кнопка No
Set FSO = Nothing
WScript.Quit
End If
Else
WScript.Quit
End If
 
Set OTL = FSO.OpenTextFile(FileName, 2, True)
OTL.Write Clip
OTL.Close
 
Set OTL = Nothing
Set FSO = Nothing
WScript.Quit

Если честно, не помню, где я его взял, и кто автор Very Happy
А можно ли его доработать так, чтобы при повторном применении скрипта создавался бы файл с таким же названием, но с добавлением счётчика? Ну или, если доработать таки нельзя, написать новый с такой возможностью? Very Happy
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 13851
Location: Москва

Post (Separately) Posted: Fri Apr 05, 2019 21:24    Post subject: Reply with quote

Дубль два?
HEXFIX wrote:
чтобы при повторном применении скрипта создавался бы файл с таким же названием, но с добавлением счётчика?
Последний скрипт в теме это и делает. Также см. этот.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
HEXFIX



Joined: 25 Jun 2010
Posts: 143
Location: Калининград

Post (Separately) Posted: Fri Apr 05, 2019 21:38    Post subject: Reply with quote

Да, кстати, совсем забыл там отписаться, что всё каким-то образом само собой заработало Very Happy Very Happy Very Happy
Буду внимательнее читать топик. А то пробежался по диагонали глазами, увидел, что что-то там не работает, ну и...
Спасибо, Flasher, в который раз уже выручаешь Smile
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 13851
Location: Москва

Post (Separately) Posted: Fri Apr 05, 2019 22:50    Post subject: Reply with quote

HEXFIX
Пож-та.
 Но вообще первый скрипт сейчас выглядит поуниверсальней:

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
KarS



Joined: 21 Apr 2006
Posts: 100
Location: г. Абакан

Post (Separately) Posted: Mon Dec 02, 2019 17:15    Post subject: Reply with quote

Flasher
Спасибо за Ваши разъяснения и советы.
Спасибо за сообщение о программе Listary - интересная, решил попробовать.

Вставка содержимого буфера в новый файл (текст/изображениe) - функция нужная.
Мне она нужна для вставки картинок, скопированных в буфер из интернета. Например, наверху страницы форума есть картинка Total Commander, её через меню браузера копирую в буфер, теперь её нужно вставить в виде файла.

1. Попробовал скрипт, который Вы правили, из ветки - работает, но только с текстом. Картинки из буфера не вставляет.

2. Пробовал скрипт от Бати - работает, но только с текстом. Картинки из буфера не вставляет.

3. Попробовал батник из шапки - работает, но неудобно:
- файлы создаются, но без расширения - даже исходные картинки в *.png не вставляются в виде файла со своим расширением (как было написано, по умолчанию). Нужно каждый раз переключать раскладку на англ. и дописывать расширение.
- для текста тоже нужно при каждой вставке дописывать расширения
- батник работает через обязательный вывод запрашивающего окна, т.е. не имеет опции работать в скрытом режиме.

4. В Total commander есть встроенная опция (cm_PasteFromClipboard) - вставки файла из буфера обмена. По ней можно вставлять картинки из буфера. Это здорово. Smile

Таким образом, у меня сейчас на панели команд 2 кнопки: одна для вставки текста, другая - для вставки картинок.
Но хотелось бы автоматизации Rolling Eyes
Т.е. чтобы была 1 кнопка и по ней, исходя из содержимого буфера, вставлялась либо картинка, либо текст в новый файл (при совпадении имен - оптимальным, думаю, будет использование счётчика).

Есть какие-нибудь идеи? Можно это реализовать?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 13851
Location: Москва

Post (Separately) Posted: Thu Dec 12, 2019 20:55    Post subject: Reply with quote

KarS wrote:
Мне она нужна для вставки картинок, скопированных в буфер из интернета.
Для этого в контекстном меню браузера должна быть возможноть сохранять изображение через диалог. Для популярных браузеров есть и вспомогательные аддоны, тащащие любые картинки в исходном виде. А через буфер можно разве что в своём формате записать. Не думаю, что исходный код писался под браузер. Я объяснял, как его завести. Но раз консоли нам мешают, то вот крайний вариант с допилом:
Code:
'================================ VBS ===============================
' Создание файла с текстом или растром из буфера обмена (при наличии)
'
' Условия:   1) первый параметр в поле "Команда:": "%COMMANDER_EXE%"
' 2) для обратной совместимости — запуск от %$SystemX86%\wscript.exe
'
' Параметры: "<имя файла>" "<путь назначения>"
'            /d  —  ключ ввода имени через диалог
'
' Примеры:   "" "%P"   |   "%O.lst" "%P"   |   File "%T" /d
'
Option Explicit
'====================== Путь к утилите NirCmd =======================
Const NirCmd = """%COMMANDER_PATH%\Utils\NirCmd\nircmd.exe"""
'=============================================== Автор: Flasher © ===
Const Title = " Создание файла с текстом из буфера обмена"
Dim P, FSO, WSS, Clip, N, S, R, i, Enc, Ext, F, FP, c
Set P = WSH.Arguments : If P.UnNamed.Count < 3 Then _
MsgBox "Укажите 3 параметра!", 4144, Title & "      " : WSH.Quit
Set WSS = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
With GetObject("New:1C3B4210-F441-11CE-B9EA-00AA006B1A69)")
  .GetFromClipboard : If .GetFormat(0) Then WSH.Quit
  If .GetFormat(1) Then Clip = .GetText : If Len(Clip) = 0 Then WSH.Quit
End With
N = P(1) : If P.Named.Exists("d") Or FSO.GetBaseName(N) = "" Then _
N = RTrim(InputBox(String(5, vbCr) & "Введите имя файла:", Title, N,,_
(CreateObject("htmlfile").parentwindow.self.screen.Height-18240/WSS._
RegRead("HKCU\Control Panel\Desktop\WindowMetrics\AppliedDPI"))*7.5))
S = Split(": ? * "" \ / | < >") : If N = "" Then WSH.Quit
R = Array(-230,-225,-246,698,-24,-24,-24,706,707)
For i = 0 To 8 : N = Replace(N, S(i), ChrW(R(i))) : Next
Ext = "." & FSO.GetExtensionName(N)
If IsEmpty(Clip) Then
  If InStr(1, ".bmg.gif.jpg.png.tif.tiff.", Ext &_
  ".", 1) = 0 Then Ext = ".jpg" : N = FSO.GetBaseName(N)
ElseIf Ext = "." Then Ext = ".txt" : N = N & Ext
End If
F = "\\?\" & P(2) & FSO.GetBaseName(N) : FP = F & Ext
While FSO.FileExists(FP) Or FSO.FolderExists(FP)
  c = c + 1 : FP = F & " (" & c & ")" & Ext
Wend : If Len(FP) < 264 Then F = Mid(FP, 5) Else F = FP
If IsEmpty(Clip) Then
  WSS.Run NirCmd & " clipboard saveimage """ & F & """",,1
Else
  With New Regexp
    .Pattern = "[^\s!-‚-›\u0080-\u00FF\u0400-\u04FF\u20A0-\u20CF\u2100-\u214F\w‘’–—]"
    .Global = True : If .Test(Clip) Then Enc = True Else Enc = False
  End With : FSO.CreateTextFile(F, 1, Enc).Write Clip
End If
If FSO.FileExists(F) Then WSS.Exec P(0) & " /A /O /S """ & Mid(FP, 5) & """"
Set P = Nothing : Set FSO = Nothing : Set WSS = Nothing

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
KarS



Joined: 21 Apr 2006
Posts: 100
Location: г. Абакан

Post (Separately) Posted: Sat Dec 14, 2019 15:06    Post subject: Reply with quote

Flasher,
Большое спасибо!
У меня работает отлично! Very Happy

Вставляется даже с именами, содержащими пробелы, а также по путям, где есть пробелы. Файлы распознаются на ура!

Может можно инструкцию маленько подписать: /d — ключ ввода имени через диалог - работает, если явно указано имя создаваемого файла.
Иначе этот ключ не срабатывает. - Я сразу не разобрался.

Также пришлось маленько повозиться с кнопкой.
Привожу свой вариант, может кому нужно будет для быстрой вставки.


Code:
TOTALCMD#BAR#DATA
c:\Program Files\totalcmd\Utils\WHS\PasteBufer.vbs "%COMMANDER_EXE%"
Bufer "%P"
C:\Program Files\totalcmd\WCMICONS.DLL,45



-1
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 13851
Location: Москва

Post (Separately) Posted: Sat Dec 14, 2019 15:19    Post subject: Reply with quote

KarS wrote:
/d — ключ ввода имени через диалог - работает, если явно указано имя создаваемого файла. Иначе этот ключ не срабатывает.
Ничего подобного. Там же в первом примере указаны пустые кавычки для этого. Ключ /d лишь регулирует наличие диалога при указании имени.

По коду кнопки напрашивается замечание — не выполнено второе условие, а значит, под TC 9.10+ x64 не заведётся.
И, как описано в памятке, скрипт надо тянуть на тулбар, чтобы вместо c:\Program Files\totalcmd там появился %COMMANDER_PATH%.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.


Last edited by Flasher on Sat Dec 14, 2019 15:57; edited 1 time in total
Back to top
View user's profile Send private message
KarS



Joined: 21 Apr 2006
Posts: 100
Location: г. Абакан

Post (Separately) Posted: Sat Dec 14, 2019 15:55    Post subject: Reply with quote

Использовал: "" "%P"
т.е. без ключа /d
В этом случае диалог ввода появляется. Использовал эти же параметры с ключом - диалог ввода тоже появляется.
Вот и получается, что есть ключ, что его нет - диалог ввода появляется. Я это имел в виду.
Про второе условие не знаю как его выполнить. Куда нужно вводить "%$SystemX86%\wscript.exe" ?
У меня Win7 32b - поэтому срабатывает.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 13851
Location: Москва

Post (Separately) Posted: Sat Dec 14, 2019 16:06    Post subject: Reply with quote

Ещё раз вернёмся к фразе:
KarS wrote:
работает, если явно указано имя создаваемого файла.
"Работает" = "диалог появляется" в моём понимании. Я пишу, что диалог появится и без явного указания имени. И это вполне очевидная логика. С пустым параметром получи диалог, с непустым — контроль ключом. Зачем объяснять в шапке то, что и так понятно?

Второе условие банально. wscript.exe — это интерпретатор, о чём сказано снизу памятки. Логично вводить его в начале поля "Команда:". Т.е.:
Code:
%$SystemX86%\wscript.exe "%COMMANDER_PATH%\Utils\WHS\PasteBufer.vbs" "%COMMANDER_EXE%"
У меня хоткей подвязан к em_CreateFileWithClipData. Я бы и скрипт назвал CreateFileWithClipData.vbs, т.к. PasteBufer не совсем о том. Bufer в английском — это не то же, что Clipboard.
KarS wrote:
У меня Win7 32b - поэтому срабатывает.
Я сообразил. Но лучше иметь рабочий вариант для разных ситуаций, в т. ч. для переноски (флэшка, внешник).
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.


Last edited by Flasher on Sat Dec 14, 2019 16:29; edited 1 time in total
Back to top
View user's profile Send private message
KarS



Joined: 21 Apr 2006
Posts: 100
Location: г. Абакан

Post (Separately) Posted: Sat Dec 14, 2019 16:28    Post subject: Reply with quote

"Банально" - для гуру.
Для обычных пользователей - есть памятка - это предусмотрительно, спасибо.
Но в ней написано: "Для VBScript нужно смотреть файл %WINDIR%\SYSTEM32\wscript.exe".
Из этого не понятно, что для кнопок меню в строке команда нужно писать %$SystemX86%\wscript.exe "%COMMANDER_PATH%\Utils\WHS\PasteBufer.vbs"...

Возможно, в памятке есть смысл дописать, что для обратной совместимости в 64bit-системах для кнопок меню TotalCommander в строке команда перед именем скрипта (с адресом) следует указывать %$SystemX86%\wscript.exe.
Например, %$SystemX86%\wscript.exe "%COMMANDER_PATH%\Utils\WHS\script.vbs"

Для начинающих понятно, когда описание составлено пошагово и подробно. Шаг влево-вправо - это же крах Smile
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 13851
Location: Москва

Post (Separately) Posted: Sat Dec 14, 2019 16:37    Post subject: Reply with quote

Гуру-шмуру... Всё хочу смотать в Индию, посмотреть на них. ))

Я не любитель раздувать шапки. Меня уже как-то заставили, в итоге шапка стала размером с код. Laughing
А в памятке это писать не надо, т. к. там в пункте 8 всё описано. Это не общий критерий для скриптов, а конкретное условие для определённых. Тем более что касается 9.10+, где появилась SHGetKnownFolderPath.
Любой скрипт запускается от какой-то интерпретирующей программы. Поэтому у меня и написано "запуск от".

Кстати, почему папка WHS называется? Это же неправильно.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
KarS



Joined: 21 Apr 2006
Posts: 100
Location: г. Абакан

Post (Separately) Posted: Sun Dec 15, 2019 06:54    Post subject: Reply with quote

Название папки WHS увидел в двух примерах, приведённых в TCKB.chm: в статьях "Кнопка для создания файла" и "Снятие/установка атрибутов с файлов".
Вот и скопировал.
А в чём неправильность?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 13851
Location: Москва

Post (Separately) Posted: Sun Dec 15, 2019 07:28    Post subject: Reply with quote

Потому что две последние буквы местами перепутаны. WSH = Windows Script Host.
Вижу косячок.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
KarS



Joined: 21 Apr 2006
Posts: 100
Location: г. Абакан

Post (Separately) Posted: Sun Dec 15, 2019 09:11    Post subject: Reply with quote

Понятно, у себя поправлю. Smile
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3, 4, 5, 6, 7
Page 7 of 7

 
Jump to:  
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