따옴표와 큰 따옴표 이스케이프
-param
다음 명령 줄에서 값 의 따옴표를 올바르게 이스케이프하려면 어떻게해야 합니까?
$cmd="\\server\toto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'""
Invoke-Expression $cmd
물론 이것은 실패합니다. 이스케이프 문자`를 사용하여 따옴표 (싱글 및 더블)를 이스케이프하려고 시도하고 다양한 조합을 수행했지만 아무것도 작동하지 않습니다.
이와 같은 이스케이프 매개 변수는 일반적으로 좌절감을 느끼며 시간 낭비처럼 느껴집니다. v2를 사용하는 것으로 보이므로 Joel "Jaykul"Bennet 이 얼마 전에 블로그에 올린 기술을 사용하는 것이 좋습니다 .
간단히 말해서, 문자열을 @ '...'@로 감싸기 만하면됩니다.
Start-Process \\server\toto.exe @'
-batch=B -param="sort1;parmtxt='Security ID=1234'"
'@
( 어떤 따옴표가 필요한지, 그리고 어떤 것을 이스케이프하려고하는지 가정 했다는 점을 염두에 두십시오.) 출력 작업을하고 싶다면 -NoNewWindow
스위치 를 추가 할 수 있습니다 .
BTW : 이것은 매우 중요한 문제 였기 때문에 v3 이후로 --%
PowerShell 파서가 매개 변수로 어떤 작업을 수행하지 못하도록 할 수 있습니다 .
\\server\toto.exe --% -batch=b -param="sort1;paramtxt='Security ID=1234'"
... (동일한 가정으로) 잘 작동합니다.
백틱 (`)을 사용하면 다음 위치에 넣으면 잘 작동합니다.
$cmd="\\server\toto.exe -batch=B -param=`"sort1;parmtxt='Security ID=1234'`""
$cmd
다음과 같이 반환됩니다.
\\server\toto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'"
그게 당신이 찾고 있던 것입니까?
PowerShell이 제공 한 오류는 예기치 않은 토큰 'sort1'을 참조했으며, 이것이 제가 백틱을 넣을 위치를 결정한 방법입니다.
@ '...'@ 구문은 "여기 문자열"이라고하며 입력 한 내용을 정확하게 반환합니다. 이를 사용하여 다음과 같은 방식으로 변수를 채울 수도 있습니다.
$cmd=@'
"\\server\toto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'""
'@
여는 기호와 닫는 기호는 위에 표시된대로 자체 줄에 있어야합니다.
나는 오늘 Node.js 모듈을 통해 명령을 실행하는 동안 비슷한 곤경에 처해 있음을 발견했습니다.
PowerShell을 사용하고 실행하려고했습니다.
command -e 'func($a)'
그러나 추가 기호로 인해 PowerShell은 인수를 조작했습니다. 수정하기 위해 이스케이프 된 큰 따옴표를 역틱으로 표시합니다.
command -e `"func($a)`"
참고 URL : https://stackoverflow.com/questions/18116186/escaping-quotes-and-double-quotes
'programing' 카테고리의 다른 글
문자열 바꾸기 방법이 문자를 바꾸지 않습니다. (0) | 2020.10.13 |
---|---|
Notepad ++ 충돌시 코드 줄 손실 (0) | 2020.10.13 |
현재 작업 디렉토리 대신 파일 위치를 기반으로하는 상대 경로 (0) | 2020.10.12 |
템플릿 클래스와 클래스 템플릿의 차이점은 무엇입니까? (0) | 2020.10.12 |
문자열이 Scala의 Regex와 완전히 일치하는지 확인하는 방법은 무엇입니까? (0) | 2020.10.12 |