2017-11-09 7 views
2

사이에 개 글자가있는 각괄호 (> <)를 대체 할 창 일괄 처리를 작성하려고합니다. 내가 PowerShell을에,하지만,하지만 해결 방법을 검색에 새로운 오전, 나는 파워 쉘에서 다음 작품을 발견 :Powershell 명령을 사용하여 창 내부에 백 슬릭 개행을 사용합니다.

(get-content input.txt) -replace "><", ">`n<" | set-content output.txt 

이 창 배치에서 이것을 사용하기 위해, 나는 내부를 포장 할 필요가

powershell -command "arguments" 
바꾸기 텍스트 주위에 따옴표가 무덤 Q가 발생하기 때문에

powershell -command "(gc input.txt) -replace '><', '>`n<' | sc output.txt" 

그러나 물론이 작동하지 않습니다

그래서 마지막 명령은 뭔가처럼 uote 이스케이프 문자 그대로 처리됩니다.

PS 탈출 문자를 인식 할 수 있도록 정확한 이스케이프 문자 조합을 검색했으며 비슷한 대답을 in here 발견했습니다. 그러나이 제안을 시도하면 "<이 예기치 않게 발생합니다 이 시점에서 "오류가 발생했으며 내 검색 문자열에 각진 대괄호가 포함되어 있기 때문에 필요한 항목이 더 복잡하다고 생각합니다.

+0

일반적인 문제 해결을위한 픽스는'-EncodedCommand' 매개 변수입니다. https://stackoverflow.com/a/47173505/478656 – TessellatingHeckler

답변

1

powershell.exe 명령 줄 옵션을 확인하십시오. 스크립트 블록을 사용할 수 있습니다.

powershell -command {(gc input.txt) -replace "><", ">`n<" | sc output.txt} 
+0

이미 PowerShell에있는 경우에만 scriptblock 인수를 사용할 수 있습니다. 명령 프롬프트 인터프리터는 PowerShell 스크립트 블록이 무엇인지 알지 못하며 배치 파일에서 작동하지 않고 서비스 관리를 위해'sc.exe'를 실행하려고 시도합니다. – TessellatingHeckler

1

이스케이프 문자와 큰 따옴표를 사용하지 마십시오.

powershell -command "(gc d:\t\input.txt) -replace '><', ('>'+[char]10+'<') | sc d:\t\output.txt" 
0

나는이 문제를 해결했다. 마지막 명령이다, 그래서 나는 또한, 지연 확장 사용 :

powershell -Command "(gc !inputfile!) -replace (\"^>^<\", \"^>`n^<\") | sc !outputfile!" 

그래서 실제로 이스케이프 문자의 세 가지 유형을 사용합니다! \와^및`의 조합.

내가 논리적으로 해결했다고 말하면 좋겠지 만, 결국에는 다른 도피를 사용하는 무작위 시도 일 것입니다.> <. 그러나 이것은 이스케이프 문자를 리터럴로 바꾸는 작은 따옴표를 사용하지 않고 Windows 배치 내에서 powershell을 사용하는 방법에 대한 좋은 참조입니다.