Ejecutar un comando powershell desde lote

1

Necesito dividir una línea muy larga en un archivo de texto (tal vez cientos de miles de caracteres) en líneas más cortas (8184 caracteres) y una .bat no puede manejar esta tarea

Sin embargo, encontré una solución PowerShell ( aquí ):

(gc in.txt) -replace ".{750}" , "$&`r`n" | sc out.txt

Esto funciona cuando abro la ventana de PowerShell y pego la versión ligeramente ajustada, donde 750 es 8184 y ejecutarlo, PERO al incluirlo en mi .bat Me gusta esto ...:

powershell -Command "(gc test.txt) -replace '.{8184}' , '$&`r`n' | sc temp.txt"

... no funciona según lo previsto e inserta ...

`r`n

... después de cada 8184 caracteres (no puedo formatear esto en línea, sry).


Intenté hacer uso de:

powershell -Command "& {(gc test.txt) -replace '.{8184}' , '$&`r`n' | sc temp.txt}"

powershell -Command "(gc test.txt) -replace '.{8184}' , '$&\r\n' | sc temp.txt"

powershell -Command "(gc test.txt) -replace '.{8184}' , '$&VbCrLf' | sc temp.txt"

Pero no puedo hacer que funcione. ¿Cuál es el problema aquí?

FatalBulletHit
fuente
Solo para que quede claro, ¿tiene una línea muy larga en un archivo de texto y desea dividirla en líneas más cortas y guardarla en otro archivo?
rahuldottech
@rahuldottech, sí.
FatalBulletHit

Respuestas:

2

`r`n es la secuencia de escape correcta para una nueva línea, pero el problema es que las cadenas de comillas simples no realizan la evaluación de la secuencia de escape o la interpolación de variables que hacen las cadenas de comillas dobles, de ahí que la secuencia de escape literal termine en su salida. Necesitamos pasar la cadena a PowerShell con doble cita, lo cual es un tanto complicado ya que tenemos que lidiar con cmd.exe La interpretación también. El uso de cuatro comillas dobles por comilla doble entendida hace el trabajo:

powershell -Command "(gc test.txt) -replace '.{8184}' , """"$&`r`n"""" | sc temp.txt"
Ben N
fuente
¿Cómo podría deshacer esto con PowerShell? Probé varias soluciones que encontré y ninguna de ellas parece funcionar ...
FatalBulletHit
1
@FatalBulletHit ((gc .\linebroken.txt) -join '') | sc .\oneline.txt debe poner todo de nuevo en una línea.
Ben N
Justo lo que necesitaba ... gracias una vez más! ;)
FatalBulletHit