Чтобы установить содержимое буфера обмена, как сказали Крис Торнтон, Клаату и других , используйте %windir%\system32\clip.exe
.
Обновление 2:
Для быстрой однострочности, вы можете сделать что-то вроде этого:
powershell -sta "add-type -as System.Windows.Forms; [windows.forms.clipboard]::GetText()"
Захват и анализ с помощью петли for /F
при необходимости. Это не будет выполнено так быстро, как решение JScript ниже, но имеет преимущество в простоте.
Обновленное решение:
Спасибо Джонатану за указание на возможности таинственного htmlfile
COM-объекта для получения буфера обмена. Можно получить пакетный гибрид + JScript для извлечения содержимого буфера обмена. Фактически, для его запуска требуется всего одна строка JScript и строка cscript
, и это намного быстрее, чем решение PowerShell / .NET, предложенное ранее.
@if (@CodeSection == @Batch) @then
@echo off
setlocal
set "getclip=cscript /nologo /e:JScript "%~f0""
rem // If you want to process the contents of the clipboard line-by-line, use
rem // something like this to preserve blank lines:
for /f "delims=" %%I in ('%getclip% ^| findstr /n "^"') do (
setlocal enabledelayedexpansion
set "line=%%I" & set "line=!line:*:=!"
echo(!line!
endlocal
)
rem // If all you need is to output the clipboard text to the console without
rem // any processing, then remove the "for /f" loop above and uncomment the
rem // following line:
:: %getclip%
goto :EOF
@end // begin JScript hybrid chimera
WSH.Echo(WSH.CreateObject('htmlfile').parentWindow.clipboardData.getData('text'));
Старое решение:
С помощью .NET можно получить текст буфера обмена из консоли Windows без каких-либо сторонних приложений. Если у вас установлено powershell
, вы можете извлечь содержимое буфера обмена, создав воображаемое текстовое поле и вставив в него. ( Источник )
Add-Type -AssemblyName System.Windows.Forms
$tb = New-Object System.Windows.Forms.TextBox
$tb.Multiline = $true
$tb.Paste()
$tb.Text
Если у вас нет powershell
, вы все равно можете скомпилировать простое приложение .NET для вывода текста буфера обмена в консоль. Вот пример C #. ( Вдохновение )
using System;
using System.Threading;
using System.Windows.Forms;
class dummy {
[STAThread]
public static void Main() {
if (Clipboard.ContainsText()) Console.Write(Clipboard.GetText());
}
}
Вот пакетный скрипт, который объединяет оба метода. Если powershell
существует в %PATH%
, используйте его. В противном случае найдите компилятор / компоновщик C # и создайте временное приложение .NET. Как вы можете видеть в комментариях к пакетному сценарию, вы можете захватывать содержимое буфера обмена с помощью цикла for /f
или просто выводить их на консоль.
:: clipboard.bat
:: retrieves contents of clipboard
@echo off
setlocal enabledelayedexpansion
:: Does powershell.exe exist within %PATH%?
for %%I in (powershell.exe) do if "%%~$PATH:I" neq "" (
set getclip=powershell "Add-Type -AssemblyName System.Windows.Forms;$tb=New-Object System.Windows.Forms.TextBox;$tb.Multiline=$true;$tb.Paste();$tb.Text"
) else (
rem :: If not, compose and link C# application to retrieve clipboard text
set getclip=%temp%\getclip.exe
>"%temp%\c.cs" echo using System;using System.Threading;using System.Windows.Forms;class dummy{[STAThread]
>>"%temp%\c.cs" echo public static void Main^(^){if^(Clipboard.ContainsText^(^)^) Console.Write^(Clipboard.GetText^(^)^);}}
for /f "delims=" %%I in ('dir /b /s "%windir%\microsoft.net\*csc.exe"') do (
if not exist "!getclip!" "%%I" /nologo /out:"!getclip!" "%temp%\c.cs" 2>NUL
)
del "%temp%\c.cs"
if not exist "!getclip!" (
echo Error: Please install .NET 2.0 or newer, or install PowerShell.
goto :EOF
)
)
:: If you want to process the contents of the clipboard line-by-line, use
:: something like this to preserve blank lines:
for /f "delims=" %%I in ('%getclip% ^| findstr /n "^"') do (
set "line=%%I" & set "line=!line:*:=!"
echo(!line!
)
:: If all you need is to output the clipboard text to the console without
:: any processing, then remove the above "for /f" loop and uncomment the
:: following line:
:: %getclip%
:: Clean up the mess
del "%temp%\getclip.exe" 2>NUL
goto :EOF