Powershell - eliminar metadatos del texto

Sep 15 2020

Quiero escribir un script de Powershell que, cuando se ejecute, eliminará todo el formato y los metadatos similares del texto en el portapapeles.

Estoy hablando de cosas como copiar un texto de Microsoft Word y pegarlo en Excel, normalmente esto lo pega con negrita, cursiva, etc., formateando el texto que tenía en Word pero quiero pegarlo, como si lo hubiera copiado a bloc de notas y lo copié desde allí.

  1. Preferiría escapar de la necesidad de emular la apertura de notepad.exe, pegar allí y copiar nuevamente, ya que espero que haya una opción más elegante / inteligente.
  2. Sé que hay una opción de copia "Solo texto" en las aplicaciones de Office, pero no solo no siempre funciona como cabría esperar / desearía, sino que copiar en otras aplicaciones no tiene esa opción.

Sé cómo obtener el texto del portapapeles con "Get-Clipboard" y luego configurarlo con "Set-Clipboard" pero no tengo idea de DÓNDE se almacena la maldita información de formato.

Respuestas

4 mklement0 Sep 15 2020 at 03:00

tl; dr

  • Solo llamar Get-Clipboarddebería darle la representación de texto sin formato deseada.

  • Agregue -Rawsi desea que el texto se devuelva como una cadena única de varias líneas en lugar de como una matriz de líneas.


Información de antecedentes :

  • Las aplicaciones que copian formatos basados ​​en texto enriquecido en el portapapeles , como Word y Excel que copian RTF y HTML, generalmente también copian una representación de texto sin formato del mismo contenido .

  • El Get-Clipboardcmdlet de PowerShell recupera la representación de texto sin formato :

    • de forma predeterminada en Windows PowerShell :

      • Para obtener uno de los formatos enriquecidos (si está presente), use el -TextFormatTypeparámetro con el valor de enumeración apropiado. [1]
    • invariablemente en PowerShell [Core] v6 + , dondeGet-Clipboardsolo admite la recuperación de texto sin formato.

    • Por separado, en ambas ediciones de PowerShell, puede usar el -Rawconmutador para solicitar que el texto de varias líneas del portapapeles se devuelva como una única cadena de varias líneas en lugar de una matriz de líneas , que es el valor predeterminado.


[1] Para expresar el comportamiento por defecto con argumentos explícitos:
Get-Clipboard -Format Text -TextFormatType UnicodeText; la documentación no especifica si Textdifiere el valor de la enumeración ni cómo .