VBS. Копирование в буфер обмена с "переводом строки"

qsedftghk

фея
Топикстартер
15 лет на форуме
Сообщения
2 028
Реакции
1 197
Есть такой vbs скрипт
(код копируется в блокнот, сохраняется как бла-бла.vbs, запускается в любом windows двойным щелчком мышки по файлу)
Скрипт копирует строку в буфер обмена, чтобы в дальнейшем её оттуда забрать.
Код:
Set WshShell = WScript.CreateObject("WScript.Shell")
buff="2.jpg\n3.jpg\n4.jpg\n"
WSHShell.Run "cmd.exe /C <nul set /p ""=" & buff & """ | CLIP", 0, False

Вопрос. Как получить в буфере обмена три строки:
2.jpg
3.jpg
4.jpg

а не одну строку "2.jpg\n3.jpg\n4.jpg\n"?

Честно говоря, я задолбался читать интернет на предмет "vbs, cmd, bat и буфер обмена", хочется чего-то уже готового. Ну, или есть ли какая-нибудь малююююсенькая утилита для работы с буфером обмена через командную строку?
Раньше, очень недурно работал сей код:
Код:
buff="2.jpg\n3.jpg\n4.jpg\n"
CreateObject("WScript.Shell").Run "mshta.exe ""javascript:clipboardData.setData('text','" & buff & "');close();""", 0, True
Но заметил, что он не копирует в буфер (Windows 10) длинные строки, например см. ниже, и это бесит =( То ли пауза какая-то нужна для выполнения, то ли ещё что... блин, вечно всё через одно место. Нельзя просто взять и и строку в буфер загнать =(
Код:
buff="2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n2.jpg\n3.jpg\n4.jpg\n"
CreateObject("WScript.Shell").Run "mshta.exe ""javascript:clipboardData.setData('text','" & buff & "');close();""", 0, True
 
Последнее редактирование:

splxgf

12 лет на форуме
Сообщения
7 740
Реакции
3 421
Может косые палки надо удвоить?
buff="2.jpg\\n3.jpg\\n4.jpg\\n"
 

splxgf

12 лет на форуме
Сообщения
7 740
Реакции
3 421
или так
buff="22.jpg"&vbCRLF&"3.jpg"
 

Gad

Сообщения
2 971
Реакции
1 405
есть ли какая-нибудь малююююсенькая утилита для работы с буфером обмена через командную строку?
копирует строку в буфер обмена, чтобы в дальнейшем её оттуда забрать.
Вот прям буфер нужен? Я бы избегал такого по возможности...
 
Последнее редактирование:
  • Спасибо
Реакции: qsedftghk

qsedftghk

фея
Топикстартер
15 лет на форуме
Сообщения
2 028
Реакции
1 197
Может косые палки надо удвоить?
buff="2.jpg\\n3.jpg\\n4.jpg\\n"
Не. Не прокатит ни то, ни другое.
Это я просто написал, что в этом месте хочу перевод строки, но, как я понял в командной строке, акромя "echo" перевода строки - шишь.
Gad, да, нужен буфер обмена (вертел я все соображения безопасности на оси, для себя ж делаю удобняху, а потому вот). Все эти костыли - сохранить в файл, вытащить из файла и т.п. - это боль. Видимо, придется использовать что-то сторонее, типа NirCmd.
Ну, либо тупо переписать всё на autohotkey, но лень жешь...
Есть конечно вариант типа этого:

Код:
Set objWord = CreateObject("Word.Application")
objWord.Visible = false
Set objDoc = objWord.Documents.Add()
Set objSelection = objWord.Selection
objSelection.TypeText buff
objSelection.WholeStory
objSelection.copy
objDoc.close wdDoNotSaveChanges
objWord.quit

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

Gad

Сообщения
2 971
Реакции
1 405
Я как-то городил копирование путей к выделенным файлам в буфер из проводника через контекстное меню :) надо поискать
 

izrukvruki

15 лет на форуме
Сообщения
1 833
Реакции
302
В тотале есть такая опция:
1637049070366.png


в буфере копируются через строчку, как и нужно TC
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Честно говоря, я тоже не пойму, по каким религиозным соображениям нужен именно такой разделитель. В любом случае, а если перевод строки через Chr(10)&Chr(13) задавать, например - тоже не выходит?
 

qsedftghk

фея
Топикстартер
15 лет на форуме
Сообщения
2 028
Реакции
1 197
Терпение и немного поисков. итого.
Код:
'это нужно, чтобы не мелькало окно с командной строкой
If InStr(1, WScript.FullName, "wscript.exe", vbTextCompare) > 0 Then
    With CreateObject("WScript.Shell")
        WScript.Quit .Run("cscript.exe """ & WScript.ScriptFullName & """", 0, True)
    End With
End If
'--------------------------------------------------------------------------------------

Set WshShell = WScript.CreateObject("WScript.Shell")
buff="2.jpg"&chr(13)&"3.jpg"&chr(13)&"4.jpg"&chr(13)&"текстовый документ"
 

Set oExec = WshShell.Exec("clip")
Set oIn = oExec.stdIn

'это нужно, чтобы русские буковки не были крякозяблами
    Set Stream = CreateObject("ADODB.Stream")
    Stream.Type = 2
    Stream.Mode = 3
    Stream.Open
    Stream.Charset = "cp866"
    Stream.WriteText buff
    Stream.Position = 0
    Stream.Charset = "windows-1251"
    buff = Stream.ReadText
'---------------------------------------------------------
    
    oIn.WriteLine buff
    oIn.Close
    Set oIn = Nothing
    Set oExec = Nothing


WScript.Quit
 

qsedftghk

фея
Топикстартер
15 лет на форуме
Сообщения
2 028
Реакции
1 197
Честно говоря, я тоже не пойму, по каким религиозным соображениям нужен именно такой разделитель. В любом случае, а если перевод строки через Chr(10)&Chr(13) задавать, например - тоже не выходит?
В том виде кода, как был с самого начала, ничего не катит
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
В таком случае, как обычно, ты искал ответ на одну задачу, а спросил за другую '))'
 
  • Спасибо
Реакции: ~RA~

qsedftghk

фея
Топикстартер
15 лет на форуме
Сообщения
2 028
Реакции
1 197
решаю вообще третью, так-то '))':4)
Ну, почему же? Цель была скопировать строку в буфер обмена с помощью vbs
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835

qsedftghk

фея
Топикстартер
15 лет на форуме
Сообщения
2 028
Реакции
1 197
И? Скопировать в буфер строку, в которой есть разделители ("2.jpg\n3.jpg\n4.jpg\n"), чтобы в итоге получилось три строки. В теме упоминается vbs, значит, конечно же хочется и решения на vbs, чего тут непонятного-то?
Простым добавлением в строку разделителей типа &Chr(13) вместо \n не прокатит, хотя, понятное дело, разделители всё равно нужны &Chr(13) или vbCRLF.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Ну ты ж так и делаешь
buff="2.jpg"&chr(13)&"3.jpg"&chr(13)&"4.jpg"&chr(13)&"текстовый
И у тебя не три строки, а одна с разделителями все равно. Как ты собирался три туда загнать я вообще не пойму.