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 .bat
no puedo realizar 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
está 8184
y la ejecuto, PERO cuando la incluyo en mi.bat
así...:
powershell -Command "(gc test.txt) -replace '.{8184}' , '$&`r`n' | sc temp.txt"
... no funciona como estaba previsto y se inserta...
`r`n
... después de cada carácter 8184 (no puedo formatear esto en línea, lo siento).
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 hacerlo funcionar. ¿Cuál es el problema aquí?
Respuesta1
`r`n
es la secuencia de escape correcta para una nueva línea, pero el problema es que las cadenas entre comillas simples no realizan la evaluación de la secuencia de escape o la interpolación variable que hacen las cadenas entre comillas dobles, por lo que la secuencia de escape literal termina en su salida. Necesitamos pasar la cadena a PowerShell entre comillas dobles, lo cual es algo complicado ya que cmd.exe
también tenemos que lidiar con la interpretación de. Usar cuatro comillas dobles por cada comilla doble entendida hace el trabajo:
powershell -Command "(gc test.txt) -replace '.{8184}' , """"$&`r`n"""" | sc temp.txt"