Powershell - usuwa metadane z tekstu

Sep 15 2020

Chcę napisać skrypt Powershell, który po uruchomieniu usunie całe formatowanie i podobne metadane z tekstu w schowku.

Mówię o takich rzeczach, jak kopiowanie tekstu z Microsoft Word i wklejanie go do Excela, zwykle to wkleja go pogrubieniem, kursywą itp., Formatując tekst w programie Word, ale chcę go wkleić, tak jakbym go skopiował Notatnik i skopiowałem go stamtąd.

  1. Wolałbym uniknąć konieczności emulacji otwierania programu notepad.exe, wklejania go i ponownego kopiowania, ponieważ mam nadzieję, że istnieje bardziej elegancka / inteligentna opcja.
  2. Wiem, że w aplikacjach pakietu Office istnieje opcja kopiowania „Tylko tekst”, ale nie tylko nie zawsze działa ona zgodnie z oczekiwaniami / oczekiwaniami, ale kopiowanie do innych aplikacji nie ma takiej opcji.

Wiem, jak pobrać tekst ze schowka za pomocą „Get-Clipboard”, a następnie ustawić go za pomocą „Set-Clipboard”, ale nie mam pojęcia, GDZIE są przechowywane informacje o formatowaniu.

Odpowiedzi

4 mklement0 Sep 15 2020 at 03:00

tl; dr

  • Samo wywołanie Get-Clipboardpowinno dać pożądaną reprezentację w postaci zwykłego tekstu.

  • Dodaj, -Rawjeśli chcesz, aby tekst był zwracany jako pojedynczy , wieloliniowy ciąg, a nie jako tablica wierszy.


Informacje podstawowe :

  • Aplikacje, które kopiują sformatowane formaty tekstowe do schowka , takie jak Word i Excel kopiujące pliki RTF i HTML, zwykle również kopiują reprezentację tej samej zawartości w postaci zwykłego tekstu .

  • PowerShell jest Get-Clipboardcmdlet pobiera zwykły tekst reprezentacji :

    • domyślnie w programie Windows PowerShell :

      • Aby uzyskać jeden z formatów sformatowanych (jeśli jest obecny), użyj -TextFormatTypeparametru z odpowiednią wartością wyliczenia. [1]
    • niezmiennie w PowerShell [Core] v6 + , gdzieGet-Clipboardobsługuje tylko pobieranie zwykłego tekstu.

    • Oddzielnie w obu wersjach programu PowerShell można użyć -Rawprzełącznika, aby zażądać, aby tekst wielowierszowy w schowku został zwrócony jako pojedynczy, wieloliniowy ciąg, a nie jako tablica wierszy , co jest wartością domyślną.


[1] Aby wyrazić domyślne zachowanie za pomocą jawnych argumentów
Get-Clipboard -Format Text -TextFormatType UnicodeText:; dokumentacja nie określa, czy i jak Textróżni się wartość wyliczenia .