Powershell — удаление метаданных из текста

#powershell #text #format #clipboard

#powershell #текст #форматирование #буфер обмена

Вопрос:

Я хочу написать сценарий Powershell, который при запуске удалит все форматирование и аналогичные метаданные из текста в буфере обмена.

Я говорю о таких вещах, как копирование некоторого текста из Microsoft Word и вставка его в Excel, обычно это выделяет его жирным шрифтом, курсивом или т. Д. Форматирование текста в Word, но я хочу вставить его, как если бы я скопировал его в блокнот и скопировал его оттуда.

  1. Я бы предпочел избежать необходимости эмулировать открытие notepad.exe вставляем туда и копируем снова, так как я надеюсь, что есть более элегантный / интеллектуальный вариант.
  2. Я знаю, что в приложениях Office есть опция копирования «Только текст», но она не только не всегда работает так, как вы ожидаете / хотите, но и копирование в другие приложения не имеет такой опции.

Я знаю, как получить текст из буфера обмена с помощью «Get-Clipboard» и впоследствии установить его с помощью «Set-Clipboard», но я понятия не имею, ГДЕ хранится информация о форматировании.

Комментарии:

1. Не уверен, что я понимаю вопрос — звучит так, как будто вы просто ищете Get-Clipboard -Format Text -TextFormatType UnicodeText -Raw |Set-Clipboard ?

2. @MathiasR.Jessen, черт возьми, это именно то, что мне нужно! Извините, я не знал, что есть опция «Raw»! 🙂

3. Не беспокойтесь — спасибо за согласие.

Ответ №1:

tl; dr

  • Простой вызов Get-Clipboard должен дать вам желаемое представление в виде обычного текста.

  • Добавьте -Raw , если вы хотите, чтобы текст возвращался в виде однострочной многострочной строки, а не в виде массива строк.


Справочная информация:

  • Приложения, которые копируют форматы расширенного текста в буфер обмена, такие как Word и Excel, копирующие RTF и HTML, обычно также копируют текстовое представление того же содержимого.

  • Get-Clipboard Командлет PowerShell извлекает представление :

    • по умолчанию в Windows PowerShell:

      • Чтобы получить один из расширенных форматов (если таковой имеется), используйте -TextFormatType параметр с соответствующим значением перечисления.[1]
    • неизменно в PowerShell (Core) версии 7 , где Get-Clipboard поддерживается только извлечение обычного текста.

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


[1] Чтобы выразить поведение по умолчанию с явными аргументами:
Get-Clipboard -Format Text -TextFormatType UnicodeText ; в документации не указано, отличается ли значение перечисления Text и как именно.