일괄 처리에서 powershell 명령 실행

일괄 처리에서 powershell 명령 실행

텍스트 파일의 매우 긴 줄(십만 자 정도)을 더 짧은 줄(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"

관련 정보