Заметки о Windows и других программных продуктах Microsoft...

Работаем с буфером обмена из командной строки

Работаем с буфером обмена из командной строки

О том, как пользоваться буфером обмена, знает практически любой пользователь Windows. Однако далеко не все знают, что работать с буфером можно не только из графической оболочки, но и из командной строки. Для этого есть несколько разных способов.

Способ 1

Добраться до буфера обмена можно с помощью .Net класса Clipboard. Для того, чтобы этот класс стал доступен, сначала загрузим сборку:

Add-Type -AssemblyName PresentationCore

После чего выведем статические методы класса командой:

[Windows.Clipboard] | Get-Member -Static

методы класса Clipboard

 

Названия методов интуитивно понятны, например set — добавить в буфер, get — получить из буфера и т.п. Для примера поместим в буфер обмена текст:

[Windows.Clipboard]::SetText(″Hello″)

Затем считаем текст из буфера:

[Windows.Clipboard]::GetText()

И очистим буфер:

[Windows.Clipboard]::Clear()

работа с буфером обмена с помощью класса Clipboard

 

Буфер может  содержать не только текст, но и некоторые другие типы данных (изображения, аудио и списки файлов). В качестве примера добавим в буфер список файлов (filedroplist), а затем посмотрим результат:

$files = Get-ChildItem C:\files
[Windows.Clipboard]::SetFileDropList($files)
[Windows.Clipboard]::GetFileDropList()

указание типа данных в буфере обмена

 

При необходимости можно уточнить, какой именно тип данных содержится в буфере. Например добавим в него текст:

[Windows.Clipboard]::SetText(″Hello″)

И проверим, содержит ли буфер текстовые данные или список файлов:

[Windows.Clipboard]::ContainsText()
[Windows.Clipboard]::ContainsFileDropList()

Первая команда вернет True, вторая — False, т.е. в буфере находится именно текст.

проверка типа данных в буфере обмена

Способ 2

В пятой версии PowerShell для работы с буфером обмена появились специальные командлеты Get-Clipboard и Set-Clipboard. Работать с ними гораздо проще и удобнее, например добавим в буфер текст и затем считаем его:

Set-Clipboard -Value ″Hello″
Get-Clipboard

Еще одна полезная фича новых командлетов — это возможность добавить данные в буфер, не затирая уже имеющиеся. Для добавления используется Set-Clipboard с ключом Append. Для примера добавим еще текст и затем проверим содержимое буфера:

Set-Clipboard -Value ″World″ -Append

командлеты Get-Clipboard и Set-Clipboard

 

Если в буфере находятся не простой текст, то при получении содержимого необходимо указывать тип данных. Например добавим в буфер список файлов и выведем его:

Set-Clipboard -Path C:\files\*
Get-Clipboard -Format FileDropList

работа со списком файлов в буфере обмена

Способ 3

Еще можно работать с буфером обмена через методы COM-объекта HtmlFile. Этот cпособ не самый прямой, но вполне рабочий. Для начала создаем новый объект:

$clipboard = New-Object -ComObject ″htmlfile″

Затем помещаем данные в переменную:

$data = ″Hello″

С помощью метода setData добавляем данные в буфер:

$clipboard.parentWindow.clipboardData.setData(″text″,$data)

А с помощью метода getData получаем его содержимое:

$clipboard.parentWindow.clipboardData.getData(″text″)

работа с буфером обмена с помощью com-объекта htmlfile

Способ 4

Ну и напоследок старая добрая утилита командной строки clip.exe. С ее помощью можно поместить данные в буфер, например передав их по конвейеру:

″Hello″ | clip

Получить обратно из буфера данные утилита не умеет, для этого придется воспользоваться одним из описанных выше методов.

утилита clip.exe

 
 
Комментарии

Пока нет комментариев.