텍스트 파일의 매우 긴 줄(십만 자 정도)을 더 짧은 줄(8184자)로 분할해야 하는데 .bat
이 작업을 처리할 수 없습니다.
그러나 PowerShell 솔루션을 찾았습니다(여기):
(gc in.txt) -replace ".{750}" , "$&`r`n" | sc out.txt
이것은 PowerShell 창을 열고 약간 조정된 버전을 붙여넣고 실행하면 750
작동 하지만 다음과 같이 포함하면 ...:8184
.bat
powershell -Command "(gc test.txt) -replace '.{8184}' , '$&`r`n' | sc temp.txt"
... 의도한 대로 작동하지 않고 삽입됩니다 ...
`r`n
... 8,184번째 문자마다 끝납니다(죄송하지만 인라인 형식으로 지정할 수는 없습니다).
나는 다음을 활용하려고 노력했습니다.
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"
하지만 나는 그것을 작동시킬 수 없습니다. 여기서 문제는 무엇입니까?
답변1
`r`n
개행에 대한 올바른 이스케이프 시퀀스이지만 문제는 작은따옴표로 묶인 문자열이 큰따옴표로 묶인 문자열이 수행하는 이스케이프 시퀀스 평가 또는 변수 보간을 수행하지 않으므로 리터럴 이스케이프 시퀀스가 출력에 종료된다는 것입니다. 문자열을 큰따옴표로 묶어 PowerShell에 전달해야 하는데, cmd.exe
의 해석도 처리해야 하기 때문에 다소 까다롭습니다. 이해된 큰따옴표당 네 개의 큰따옴표를 사용하면 다음과 같은 작업이 수행됩니다.
powershell -Command "(gc test.txt) -replace '.{8184}' , """"$&`r`n"""" | sc temp.txt"