Preciso dividir uma linha muito longa em um arquivo de texto (talvez centenas de milhares de caracteres) em linhas mais curtas (8.184 caracteres) e .bat
não consigo realizar essa tarefa.
No entanto, encontrei uma solução PowerShell (aqui):
(gc in.txt) -replace ".{750}" , "$&`r`n" | sc out.txt
Isso funciona quando abro a janela do PowerShell e colo a versão ligeiramente ajustada, onde 750
está 8184
e a executo, MAS ao incluí-la no meu .bat
assim...:
powershell -Command "(gc test.txt) -replace '.{8184}' , '$&`r`n' | sc temp.txt"
... não funciona como esperado e insere ...
`r`n
... após cada 8184 caracteres (não consigo formatar isso em linha, desculpe).
Eu tentei fazer 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"
Mas não consigo fazer funcionar. Qual é o problema aqui?
Responder1
`r`n
é a sequência de escape correta para uma nova linha, mas o problema é que as strings entre aspas simples não fazem a avaliação da sequência de escape ou a interpolação de variável que as strings entre aspas duplas fazem, portanto, a sequência de escape literal termina em sua saída. Precisamos passar a string para o PowerShell entre aspas duplas, o que é um tanto complicado, pois cmd.exe
também temos que lidar com a interpretação de '. Usar quatro aspas duplas por aspas duplas compreendidas resolve o problema:
powershell -Command "(gc test.txt) -replace '.{8184}' , """"$&`r`n"""" | sc temp.txt"