Powershell - 从文本中删除元数据

Powershell - remove metadata from text

我想编写一个 Powershell 脚本,当 运行 时,将从剪贴板中的文本中删除所有格式和类似的元数据。

我说的是诸如从 Microsoft Word 中复制一些文本并将其粘贴到 Excel 之类的东西,通常这会将其粘贴为粗体、斜体等。格式化文本在 Word 中的格式,但我想粘贴它,就好像我已经将它复制到记事本并从那里复制了它。

  1. 我宁愿避免模拟打开 notepad.exe 的需要,粘贴到那里并再次复制,因为我希望有更多 elegant/intelligent 选项。
  2. 我知道 Office 应用程序中有一个复制选项“仅文本”,但它不仅不能像您希望的那样总是工作 expect/want,而且复制到其他应用程序也没有该选项。

我知道如何使用“Get-Clipboard”从剪贴板中获取文本,然后使用“Set-Clipboard”对其进行设置,但我不知道该死的格式信息存储在哪里。

tl;dr

  • 只需调用 Get-Clipboard 即可获得所需的 plain-text 表示。

  • 如果您希望文本作为 单个 、multi-line 字符串而不是 [=40= 返回,请添加 -Raw ]array 行。


背景资料:

  • 将富 text-based 格式复制到剪贴板的应用程序,例如 Word 和 Excel 复制 RTF 和 HTML, 通常复制相同内容的plain-text表示.

  • PowerShell 的 Get-Clipboard cmdlet 检索 plain-text 表示:

    • WindowsPowerShell中默认[=​​75=]:

    • 在 PowerShell [Core] v6+ 中总是,其中 Get-Clipboard 仅支持 plain-text检索。

    • 另外,在两个 PowerShell 版本中,您可以使用 -Raw 开关请求将剪贴板上的 multi-line 文本作为 单个文本返回, multi-line 字符串 而不是默认的 行数组


[1] 用显式参数表达默认行为:
Get-Clipboard -Format Text -TextFormatType UnicodeText;文档没有指定枚举值 Text 是否以及如何不同。