Вставка содержимого буфера в новый файл (текст/изображениe)
Select messages from
# through # FAQ
[/[Print]\]
Goto page Previous  1, 2, 3, 4, 5, 6, 7  :| |:
Total Commander -> Автоматизация Total Commander

#91:  Author: HEXFIXLocation: Калининград PostPosted: Fri Apr 05, 2019 21:09
    —
Прошу помощи.
Использую вот такой скрипт
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

#92:  Author: FlasherLocation: Москва PostPosted: Fri Apr 05, 2019 21:24
    —
Дубль два?
HEXFIX wrote:
чтобы при повторном применении скрипта создавался бы файл с таким же названием, но с добавлением счётчика?
Последний скрипт в теме это и делает. Также см. этот.

#93:  Author: HEXFIXLocation: Калининград PostPosted: Fri Apr 05, 2019 21:38
    —
Да, кстати, совсем забыл там отписаться, что всё каким-то образом само собой заработало Very Happy Very Happy Very Happy
Буду внимательнее читать топик. А то пробежался по диагонали глазами, увидел, что что-то там не работает, ну и...
Спасибо, Flasher, в который раз уже выручаешь Smile

#94:  Author: FlasherLocation: Москва PostPosted: Fri Apr 05, 2019 22:50
    —
HEXFIX
Пож-та.
 Но вообще первый скрипт сейчас выглядит поуниверсальней:

#95:  Author: KarSLocation: г. Абакан PostPosted: Mon Dec 02, 2019 17:15
    —
Flasher
Спасибо за Ваши разъяснения и советы.
Спасибо за сообщение о программе Listary - интересная, решил попробовать.

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

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

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

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

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

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

Есть какие-нибудь идеи? Можно это реализовать?

#96:  Author: FlasherLocation: Москва PostPosted: Thu Dec 12, 2019 20:55
    —
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

#97:  Author: KarSLocation: г. Абакан PostPosted: Sat Dec 14, 2019 15:06
    —
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

#98:  Author: FlasherLocation: Москва PostPosted: Sat Dec 14, 2019 15:19
    —
KarS wrote:
/d — ключ ввода имени через диалог - работает, если явно указано имя создаваемого файла. Иначе этот ключ не срабатывает.
Ничего подобного. Там же в первом примере указаны пустые кавычки для этого. Ключ /d лишь регулирует наличие диалога при указании имени.

По коду кнопки напрашивается замечание — не выполнено второе условие, а значит, под TC 9.10+ x64 не заведётся.
И, как описано в памятке, скрипт надо тянуть на тулбар, чтобы вместо c:\Program Files\totalcmd там появился %COMMANDER_PATH%.


Last edited by Flasher on Sat Dec 14, 2019 15:57; edited 1 time in total

#99:  Author: KarSLocation: г. Абакан PostPosted: Sat Dec 14, 2019 15:55
    —
Использовал: "" "%P"
т.е. без ключа /d
В этом случае диалог ввода появляется. Использовал эти же параметры с ключом - диалог ввода тоже появляется.
Вот и получается, что есть ключ, что его нет - диалог ввода появляется. Я это имел в виду.
Про второе условие не знаю как его выполнить. Куда нужно вводить "%$SystemX86%\wscript.exe" ?
У меня Win7 32b - поэтому срабатывает.

#100:  Author: FlasherLocation: Москва PostPosted: Sat Dec 14, 2019 16:06
    —
Ещё раз вернёмся к фразе:
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 - поэтому срабатывает.
Я сообразил. Но лучше иметь рабочий вариант для разных ситуаций, в т. ч. для переноски (флэшка, внешник).

Last edited by Flasher on Sat Dec 14, 2019 16:29; edited 1 time in total

#101:  Author: KarSLocation: г. Абакан PostPosted: Sat Dec 14, 2019 16:28
    —
"Банально" - для гуру.
Для обычных пользователей - есть памятка - это предусмотрительно, спасибо.
Но в ней написано: "Для 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

#102:  Author: FlasherLocation: Москва PostPosted: Sat Dec 14, 2019 16:37
    —
Гуру-шмуру... Всё хочу смотать в Индию, посмотреть на них. ))

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

Кстати, почему папка WHS называется? Это же неправильно.

#103:  Author: KarSLocation: г. Абакан PostPosted: Sun Dec 15, 2019 06:54
    —
Название папки WHS увидел в двух примерах, приведённых в TCKB.chm: в статьях "Кнопка для создания файла" и "Снятие/установка атрибутов с файлов".
Вот и скопировал.
А в чём неправильность?

#104:  Author: FlasherLocation: Москва PostPosted: Sun Dec 15, 2019 07:28
    —
Потому что две последние буквы местами перепутаны. WSH = Windows Script Host.
Вижу косячок.

#105:  Author: KarSLocation: г. Абакан PostPosted: Sun Dec 15, 2019 09:11
    —
Понятно, у себя поправлю. Smile



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


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

Goto page Previous  1, 2, 3, 4, 5, 6, 7  :| |:
Page 7 of 7

Powered by phpBB © 2001, 2005 phpBB Group