2012-10-12 312 views
5

Esta pregunta es una continuación de another question about selectively appending lines from one file to another.Línea de comandos/shell de Windows: descartando la BOM UTF-8

La expresión regular que estoy usando funciona bien al hacer coincidir las líneas para mantener/descartar. El problema es que el archivo se compuso de muchos otros archivos y, a veces, la línea que quiero mantener comenzó como la primera línea de un archivo codificado en UTF-8. Esto significa que el findstr comando devuelve algo como:

LineToKeep that started out as the first line in its file 
LineToKeep another 
LineToKeep more lines 
LineToKeep that started out as the first line in its file 
LineToKeep more 

Está garantizado que con excepción de los bytes de la lista de materiales, la línea siempre se iniciará con "LineToKeep". ¿Cómo puedo deshacerme de esos tres bytes de BOM UTF-8, ya que estos comandos de Windows shell no pueden manejarlos adecuadamente?

Estoy esperando una manera de eliminarlos en su lugar, o tal vez una modificación en el comando findstr de la pregunta anterior.

Como sé que cada línea debe comenzar con "LineToKeep" o "∩╗┐LineToKeep", creo que hay una forma de calcular algo como if (Line[3:10] == "LineToKeep") { Line = Line[3:]; } para cada línea.

+1

..y esta es la razón por la cual perl debe enviarse con todos los SO ;-) –

+0

¿Ha pensado en utilizar Powershell en lugar del intérprete de comandos de vanilla? Hacer algo como esto sería trivial. Al shell de Windows no le gusta mucho Unicode. – kprobst

+0

Voy a ejecutar el script en los eventos previos o posteriores a la compilación de Visual Studio. De acuerdo con http://stackoverflow.com/questions/6500320/post-build-event-execute-powershell, ejecutar una secuencia de comandos de PowerShell puede ser una opción. Sin embargo, se sentiría como una solución externa. – Kache

Respuesta

1

que terminó llamando PowerShell en Windows cmd:

powershell . "Get-ChildItem . | Select-String '^LineToKeep' | foreach {$_.Line}" 
Cuestiones relacionadas