Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.97/74: Рейтинг темы: голосов - 74, средняя оценка - 4.97
Особый статус
Эксперт WindowsВирусоборец
8429 / 1708 / 87
Регистрация: 15.04.2011
Сообщений: 5,520

Скрипт обработки буфера обмена

26.04.2013, 20:16. Показов 16212. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет.
В очередной раз решил придумать фишечку для ОС,для чего нужно составить небольшой скрипт.
Дабы сэкономить силы и время то обращаюсь сразу к спецу по скриптам)))

Задача:
Выделяю правой кнопкой мыши текст в файле,он помещается в буфер,далее ему назначаем переменную.
Переменную я передаю в обработку через глагол в реестре.
Пример:
выделяю слово "Ава" -получаю переменную %ава%,которая помещается в определенное место в команде.
Если выделяю два слова "ава попка" то создаются две переменные %ава% дополнительная запись в команду %попка%
И так далее по нарастающей.
Если выделяю файл или папку то в переменную попадает только имя файла или папки.
В буфер инфу можно направить в принципе командой copy.
Или еще как.
При этом нежелательно использовать нирсмд и прочее-хотелось бы обычной консолькой.

Сможем?))
Наметки скрипта как всегда не даю-криворуко выщло.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.04.2013, 20:16
Ответы с готовыми решениями:

Нужен скрипт, вставляющий из буфера обмена в любую программу
Добрый день,всем! Я оптимизирую работу в САПР с помощью макросов. В макросах могут содержаться скрипты операционной системы. Операционная...

Присвоить переменной значение, взятое из буфера обмена
Случайно не подскажите как присвоить переменной команду getclip (вставка из буфера обмен) или что-то подобное извиянюсь за корявость: ...

Запись текста из буфера обмена в файл (вариант с mshta)
Собственно, рабочий код у меня есть. Удобная фишка для контекстного меню всех файлов: cmd /U /c @ECHO OFF & MSHTA.EXE...

41
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
27.04.2013, 01:06
Цитата Сообщение от Koza Nozdri Посмотреть сообщение
Выделяю правой кнопкой мыши текст в файле,он помещается в буфер
Каким образом он должен попадать в буфер?

Добавлено через 50 секунд
Цитата Сообщение от Koza Nozdri Посмотреть сообщение
Переменную я передаю в обработку через глагол в реестре.
Уверены? Переменная при этом должна быть доступна в системе глобально?
0
Особый статус
Эксперт WindowsВирусоборец
8429 / 1708 / 87
Регистрация: 15.04.2011
Сообщений: 5,520
27.04.2013, 07:05  [ТС]
Проверил с вариантом через глагол-ось не всегда понимает чего я от нее хочу.
Так что это будет просто батник,ссыль на который я помещу для обработки в реестр.
В буфер тест/имя файла/папки могут попадать как угодно,все что позволит наша фантазия.
Если это будет просто copy с перенаправлением данных из буфера-то можно и так.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
27.04.2013, 15:58
Если честно, не понял ни единого слова ни с 1, ни с 3 поста.
Нужно как-то разжевать на примерах.
0
Особый статус
Эксперт WindowsВирусоборец
8429 / 1708 / 87
Регистрация: 15.04.2011
Сообщений: 5,520
29.04.2013, 19:47  [ТС]
Понял,потом выложу свой скрипт который не работает.
0
Особый статус
Эксперт WindowsВирусоборец
8429 / 1708 / 87
Регистрация: 15.04.2011
Сообщений: 5,520
30.04.2013, 23:11  [ТС]
Так пробую пример с nirCMD.
получаем имя
Bash
1
<file> cmd.exe /c "<nul set /p sTemp="%~nx1"|clip.exe"
из буфера ложим текст в файл
Bash
1
2
3
4
5
6
@echo off
nircmd.exe clipboard addfile "file.txt"
set /p param=<"info1.txt"
del file.txt
Echo Содержимое буфера обмена: %param%
pause>nul
потом
Bash
1
моя команда
Текст файла переводим в переменный по этому принципу
Пример:
выделяю слово "Ава" -получаю переменную %ава%,которая помещается в определенное место в команде.
Если выделяю два слова "ава попка yje" то создаются две переменные %ава% <znak> %попка%<znak>%yje%
И так далее по нарастающей.
причем очень хочется обойтись без создания файла...

Добавлено через 1 минуту
Так лучше?
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
01.05.2013, 02:47
Советую для начала почитать эти примеры: Присвоить переменной значение, взятое из буфера обмена

Цитата Сообщение от Koza Nozdri Посмотреть сообщение
Так лучше?
Нет, наоборот. Цитированием кода - это еще не понятней.
Объясните по-другому.
Жду ответы на пост № 2.

Добавлено через 2 минуты
Дайте ссылку - откуда Вы выделнули 1-ый код.
Вообще неясен алгоритм.

Добавлено через 3 часа 18 минут
Цитата Сообщение от Koza Nozdri
,порядок действий:
1)выделяю файл
2)в контексном меню он копируется как имя и попадает в буфер обмена
3)с буфера я получаю имя файла/папки в консоль или временный файл и привожу его с помощью переменных пригодными к отправке в броузер.

Я сначала пытался всяко разно сам написать.
Потом гуглил.
Ничего не подошло.
Вот п.2. я и не понял. Т.е. не "копируется", а "копирую вручную" ?
Просто изначальная постановка именно из-за этого и пострадала, почему я (да думаю и другие) и не поняли вопроса.

По поводу, как вытянуть путь к файлу, который скопировали правым кликом (контекстное меню) в буфер обмена - это тот еще вопрос. Я и на других языках ответа не встречал, но он есть.

Вторая часть задания - я так понял сделать нечто с текстом внутри файла. А именно поместить в переменные по определенным правилам. Но я точно не понял каким. И с какой целью они будут дальше использоваться. А это влияет на задачу - какая область видимости требуется для переменных (локальная - только в границах пакетного файла или глобальная - переменные должны быть доступны другим программам).
0
Особый статус
Эксперт WindowsВирусоборец
8429 / 1708 / 87
Регистрация: 15.04.2011
Сообщений: 5,520
10.06.2013, 12:40  [ТС]
А наоборот поместить в буфер как текст имя файла или папки?
0
1748 / 353 / 41
Регистрация: 15.10.2012
Сообщений: 550
10.06.2013, 13:54
Цитата Сообщение от Koza Nozdri Посмотреть сообщение
А наоборот поместить в буфер как текст имя файла или папки?
Ответ в стиле известного капитана
Bash
1
echo имя_файла| clip
1
Особый статус
Эксперт WindowsВирусоборец
8429 / 1708 / 87
Регистрация: 15.04.2011
Сообщений: 5,520
10.06.2013, 13:59  [ТС]
Smitis, я так и сам умею)))
А тут все сложнее-в буфер должно попадать имя выделенного файла.
Средствами бат лично у меня не получилось,пробовал вбс временный прикрутить с удалением себя,но либо знании мало либо опять нельзя....
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
10.06.2013, 14:08
Koza Nozdri, можно попробовать VBS через Invoke verb. Вечером отпишу.
1
1748 / 353 / 41
Регистрация: 15.10.2012
Сообщений: 550
10.06.2013, 14:44
Цитата Сообщение от Koza Nozdri Посмотреть сообщение
А тут все сложнее-в буфер должно попадать имя выделенного файла.
Средствами бат лично у меня не получилось,пробовал вбс временный прикрутить с удалением себя,но либо знании мало либо опять нельзя....
Ну тогда вопрос на засыпку - откуда CMD или VBS должны знать, что где-то выделен файл? Что за программа-то? В ФАРе, например, нажал CtrlIns на выделенном файле и имя в буфере. В Тотале типа того же должно быть. Из проводника в консольное окно можно просто перетащить и т.д. и т.п.
0
Особый статус
Эксперт WindowsВирусоборец
8429 / 1708 / 87
Регистрация: 15.04.2011
Сообщений: 5,520
10.06.2013, 18:57  [ТС]
Цитата Сообщение от Smitis Посмотреть сообщение
Ну тогда вопрос на засыпку - откуда CMD или VBS должны знать, что где-то выделен файл?
Так если б я сам знал как им указать,то не просил бы помочь)))

Добавлено через 3 минуты
Я двигался в таком направлении:
1)выделяем
2)направляем к файлу команду обработки через копировать или получить путь к файлу и дописать имя-считать-распарсить-поместить имя в буфер-вернуть имя.
3)не могу считать данные
4)тупик

Добавлено через 2 минуты
А ,забыл-к файлам и папкам функцию прикрутить смог,тока что бы это работало как следует сделать не смог.
О,чьерт побьерри,я тупой...
0
10.06.2013, 20:17

Не по теме:

А Shift+ПКМ не пробовал? ;)

2
Особый статус
Эксперт WindowsВирусоборец
8429 / 1708 / 87
Регистрация: 15.04.2011
Сообщений: 5,520
10.06.2013, 20:37  [ТС]

Не по теме:

FraidZZ, да так не интересно...и не позволит реализовать идею.



Добавлено через 3 минуты
"C:\Users\Public\Desktop\Norton AntiVirus.lnk"
ага...почти то что надо.
надо подумать как это без шифта будет.
пойду посоображаю.

Добавлено через 6 минут
А все нашел.
Хочу еще вариант от Алекса глянуть,ну а задумкой чуть позже поделюсь.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
11.06.2013, 03:20
Koza Nozdri, наверно как раз из задумки надо было начинать. Случайно не это изобретаешь: Path2Clipboard.htm
Я через VBS могу скопировать в буфер сам ярлык, если знать его физическое расположение (тоже, что и ПКМ -> копировать), но это не то, что Вам было нужно:

Программное выполнение глаголов контекстного меню + отображение списка глаголов для данного объекта

'Ну держитесь. Вот чего ради интереса наскриптячил.

'Выводит список глаголов (контекстного меню), которые могут быть выполнены на объектом
'Выполняет глагол "Copy" или "Копировать" над объектом, используя 1) InvokeVerb 2) DoIt
'Поддержка файлов и папок, корневой папки, ярлыков.
'Для ярлыков определяет расположение основного объекта и ссылается на него.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
'15 минут проморочился, почему выдает ошибку, что не найден объект "ярлык"
'оказывается есть Public\Desktop, а есть User\Desktop и оба отображаются на одном столе
'Path_dpnx = "c:\users\Public\desktop\Resident Evil Revelations.lnk" 'тестирую ярлык
Path_dpnx = "c:\users\alex\desktop\RemDrive.cmd - ярлык.lnk"
'Path_dpnx = "c:\VoiceSpy\reports\29.05.2013" 'тестирую папку
'Path_dpnx = "c:\VoiceSpy\reports\29.05.2013\29.05.2013_22_58_31.jpg" 'тестирую файл
'Path_dpnx = "c:\" 'тестирую корень
 
'Чтобы получить путь к объекту через аргументы или меню Shell:SendTo
'Раскомментируйте нижнюю строку:
'if WScript.Arguments.Count > 0 then Path_dpnx = WScript.Arguments(0)
 
Set objShellApp = CreateObject("Shell.Application")
 
'В языке VBScript не поддерживаются метки: работаем через цикл
Do
  Path_d = Left(Path_dpnx, 3)
  Set objFolder = objShellApp.Namespace(Path_d) '"C:\"
 
  If Len(Path_dpnx) > 3 Then
      Path_pnx = Mid(Path_dpnx, 4)
      Set objFolderItem = objFolder.ParseName(Path_pnx) '"VoiceSpy\reports\29.05.2013"
      If objFolderItem.isLink Then 'является ли объект ярлыком?
          ItsLink = True
          On Error Resume Next
              Set objLink = objFolderItem.GetLink
          If Err = 0 Then
              Path_dpnx = objLink.Path
          Else 'if err = 70 (Permissions Denied)
              Err.Clear
              'msgbox "Для этой операции требуется повышение привилегий"
              'Silent-режим: если не хватает прав использую ссылку на исходный ярлык вместо целевого объекта
              ItsLink = False
          End If
          On Error Resume Next
      Else
          ItsLink = False
      End If
  Else 'если корневой каталог
      Set objFolderItem = objFolder.Self
      ItsLink = False
  End If
 
Loop While (ItsLink = True) 'выполнять пока целевой объект - ярлык
 
'Ниже мы копируем в буфер обмена ссылку на объект
 
'1) Способ 1 - здесь нужно использовать глаголы на английском
objFolderItem.InvokeVerb ("Copy")
 
'2) Способ 2 - здесь нужно использовать глаголы согласно системным настройкам языка
For Each objFIV In objFolderItem.Verbs()
    If objFIV.Name = "&Копировать" Then '&Открыть
        objFIV.DoIt
        Exit For
    End If
Next
 
' Вот так можно просмотреть всю коллекцию глаголов, которые поддерживает конкретный выделенный объект
' Лучше смотреть на англоязычной винде (т.к. эти глаголы обратносовместимы с локализациями)
 
If objFolderItem.IsFolder Then 'Если объект - папка
    Set objFileOrFolder = objFolderItem.GetFolder.Self
Else
    Set objFileOrFolder = objFolder.ParseName(Path_pnx)
End If
Set objVerbs = objFileOrFolder.Verbs
If (Not objVerbs Is Nothing) Then
    For Each Verb In objVerbs
        MsgBox Verb.Name
        'Debug.Print Verb.Name
    Next
End If
'Примерный список глаголов в моей системе (для папки):
'&Вырезать
'&Копировать
'Создать &ярлык
'&Удалить
'Переи& меновать
'Сво& йства
'&Открыть
'Управление с помощью ACDSee Pro 6
'Добавить в плейлист медиаплеера VLC
'Воспроизвести в медиаплеере VLC
'Проверить на & вирусы

'Для файла:
'&Открыть
'Пе& чать
'&F4Menu
'Проверить на & вирусы
'Добавить в архив...
'Добавить в архив "setup.rar"
'Восста&новить прежнюю версию
'&Вырезать
'&Копировать
'Создать &ярлык
'&Удалить
'Переи& меновать
'Сво& йства





И вообще неплохо пройтись по описаниям методов объекта: Shell.Application
Этот объект ой как много чего уникального умеет. Koza Nozdri - может найдешь из того арсенала еще какую полезную плюшку.

А вот определить, какой из объектов выделен в проводнике - задачка еще та.
Можно сделать, чтобы программа была постоянно запущена и отслеживала движение курсора мыши с фиксацией текста под курсором в памяти когда нажимается правая клавиша мыши.

Но если твоя задача просто щелкнуть правой клавишей по ярлыку, в контекстном меню которого ты сам будешь модифицировать список пунктов, то все упрощается. Тот же пункт "Отправить в..." передает уже готовый путь к файлу программе (скрипту), который находится в папке Shell:SendTo (если кто не знает - в Win7 - это Пуск, в поисковой строке, именно в ней, пишем Shell:SendTo и нажимаем Enter).

Дальше в буфер обмена его можно поместить такими способами:

1) батник
Bash
1
echo %~1 | clip
при условии, что в системе есть clip.exe
(в XP отсутствует).

2) VBS-скрипт через костыль под названием Internet Explorer:
Visual Basic
1
2
3
4
5
 strCopy = "This text has been copied to the clipboard."
 Set objIE = CreateObject("InternetExplorer.Application")
 objIE.Navigate("about:blank")
 objIE.document.parentWindow.clipboardData.setData "text", strCopy
 objIE.Quit
На всякий пожарный - получить из буфера:

Visual Basic
1
2
3
4
5
6
 strClipboard = ""
 Set objIE = CreateObject("InternetExplorer.Application")
 objIE.Navigate("about:blank")
 strClipboard = objIE.document.parentWindow.clipboardData.getData("Text")
 objIE.Quit
 ' strClipboard - содержимое буфера обмена


3) Написать на другом языке, например VB6, скомпилировать в EXE-файл: Работа с буфером обмена
Аргументы командной строки там можно получить функцией Command()
И установить признак EXE-шнику "консольное приложение" через прогу от Catstail-a: Вывод текста в консоль

Не по теме:

Цитата Сообщение от FraidZZ Посмотреть сообщение
А Shift+ПКМ не пробовал?
А еще удобно при Shift+ПКМ на папке -> "Открыть окно команд."

1
Особый статус
Эксперт WindowsВирусоборец
8429 / 1708 / 87
Регистрация: 15.04.2011
Сообщений: 5,520
11.06.2013, 04:42  [ТС]
Dragokas, спасибо!
Ну тут неувязочка:
Вы речь то ведете о ярлыках,а я обо всех объектах.
Народ,я в теории уже додумался,попробую в жизни прикрутить,фишечка будет состоять в том,что бы яндекс поиск работал в системе,а обработка через command интерпретатор пойдет,именно отсюда ограничения использованием cmd-bat ,и поэтому допускается встраиваемые скрипты того же vbs....
....да-да,мутный тип я,не мог сразу рассказать...
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
11.06.2013, 10:22
Koza Nozdri, оговорился. Речь идет о всех объектах.
0
Особый статус
Эксперт WindowsВирусоборец
8429 / 1708 / 87
Регистрация: 15.04.2011
Сообщений: 5,520
14.07.2013, 10:13  [ТС]
Господа,наконец то руки дошли и примочку доделал.
Почти.
Не поможете мне справиться с такой задачкой:

Назначаю переменную,которую получаю из файла
Bash
1
set /p search=< C:\Users\Fire\Desktop\1.txt
Содержимое файла всегда разное.
И если имеются пробелы-я их должен заменить на знак %20
Например :
Code
1
Личный кабинет абонента.url
Должен принять вид:
Code
1
Личный%20кабинет%20абонента.url
Я пробовал:
Bash
1
set search=%search: %20=%
Но в таком случае вся переменная принимает значение
Code
1
20=

И вторая задачка которую я пока не победил:
Допустим имеется запись вида

Code
1
C:\Users\Fire\Desktop\Личный кабинет абонента.url
Как в bat убрать все до крайнего слэша?
Что бы получить:
Code
1
Личный кабинет абонента.url
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
14.07.2013, 12:02
Bash
1
set search=%search: =%%20%
Это касательно замены " " на "%20"

Добавлено через 4 минуты
Цитата Сообщение от Koza Nozdri Посмотреть сообщение
Как в bat убрать все до крайнего слэша?
Bash
1
2
3
echo.Wscript.Echo Mid(Wscript.Arguments(0), InStrRev(Wscript.Arguments(0), "\") + 1)>tmp.vbs
for /f "usebackq tokens=*" %%A IN (`cscript tmp.vbs "%search%" //nologo`) DO set search=%%A
erase tmp.vbs
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.07.2013, 12:02
Помогаю со студенческими работами здесь

Изменить код для вставки текста из буфера обмена
День добрый! Не знаю ни один из этих языков, а powershell есть не у всех (win XP), хотелось бы вставку из буфера на powershell: ...

Подмена буфера обмена на такой же текст с таким же кол-вом символов
Здравствуйте! Кто сможет помочь? нужна программа, работа которой будет происходить следующим образом: 1) Пользователь открывает...

Удалить из txt-файла текст, вставить в него текст из буфера обмена, удалить пробелы
Нужно открыть текстовик (например D:\temp.txt) , удалить предыдущий текст (или просто удалить сам файл а потом создать новый...

Как пресечь блокировку буфера обмена программой?
Учу язык C# по видеокурсу. Дико бесит, что во время того как открыто .exe приложение с flash видео, в котором идет урок, я не могу ничего...

Скрипт создания папки с именем взятым из буфера обмена
Здравствуйте уважаемые специалисты. Очень нужен скрипт который бы создавал папку с присвоением имени взятого из буфера обмена. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru