Powershell - удалить метаданные из текста
Я хочу написать сценарий Powershell, который при запуске удалит все форматирование и подобные метаданные из текста в буфере обмена.
Я говорю о таких вещах, как копирование текста из Microsoft Word и вставка его в Excel, обычно это вставляет его жирным шрифтом, курсивом или т. Д., Форматируя текст в Word, но я хочу вставить его, как если бы я скопировал его в блокнот и скопировал оттуда.
- Я бы предпочел избежать необходимости имитировать открытие notepad.exe, вставку туда и повторное копирование, так как я надеюсь, что есть более элегантный / интеллектуальный вариант.
- Я знаю, что в приложениях Office есть параметр копирования «Только текст», но он не только не всегда работает так, как вы ожидаете / хотите, но и при копировании в другие приложения такой возможности нет.
Я знаю, как получить текст из буфера обмена с помощью «Get-Clipboard» и впоследствии установить его с помощью «Set-Clipboard», но я понятия не имею, ГДЕ хранится чертова информация о форматировании.
Ответы
tl; dr
Простой вызов
Get-Clipboardдолжен дать вам желаемое текстовое представление.Добавить ,
-Rawесли вы хотите , чтобы текст , возвращенный в качестве одного строк многострочного , а не как массив строк.
Справочная информация :
Приложения, копирующие форматы на основе текста в буфер обмена , такие как Word и Excel, копирующие RTF и HTML, обычно также копируют текстовое представление того же содержимого .
Get-ClipboardКомандлет PowerShell извлекает текстовое представление :
по умолчанию в Windows PowerShell :
- Чтобы получить один из расширенных форматов (если он есть), используйте -TextFormatTypeпараметр с соответствующим значением перечисления. [1]
неизменно в PowerShell [Core] v6 + , где
Get-Clipboardподдерживается извлечение только обычного текста.По отдельности в обоих выпусках PowerShell вы можете использовать
-Rawпереключатель, чтобы запросить, чтобы многострочный текст в буфере обмена возвращался как однострочная строка, а не как массив строк , который используется по умолчанию.
[1] Чтобы выразить поведение по умолчанию с явными аргументами
Get-Clipboard -Format Text -TextFormatType UnicodeText:; в документации не указывается, Textотличается ли значение перечисления и как именно .