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í?
windows
batch
powershell
batch-file
FatalBulletHit
fuente
fuente
Respuestas:
`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 concmd.exe
La interpretación también. El uso de cuatro comillas dobles por comilla doble entendida hace el trabajo:fuente
((gc .\linebroken.txt) -join '') | sc .\oneline.txt
debe poner todo de nuevo en una línea.