스크립팅은 CLI 용이며 Microsoft 세계에서는 파일을 참조하는 스크립트 인수에 따옴표를 붙이기 위해 공백이 필요할 수 있습니다.인용 된 인수를 PowerShell 스크립트에 전달
이것은 나에게 문제가되는 것으로 나타났습니다. 나는이처럼 PowerShell을 대화 형 환경에서이를 실행하면
#testarg.ps1
for($i=0; $i -lt $args.length; $i++)
{
write-host "Arg$i = $($args[$i])"
}
:이 스크립트를 고려
PS C:\script> .\testarg.ps1 "first arg" "second arg"
내가 도착, 예상대로
Arg0 = first arg
Arg1 = second arg
그러나 정상적인 사용 스크립트는 대화 형 모드 외부에서 일괄 처리됩니다. 내가 이해하는 한, cmd.exe
에서 스크립트를 실행하는 the Microsoft suggested way은 powershell.exe path\to\script.ps1
(경로에 공백없이) 인 것 같습니다. 그러나 : 나는 작은 따옴표 사용할 수있는 의도 된 결과를 얻을 주목
Arg0 = first
Arg1 = arg
Arg2 = second
Arg3 = arg
:
powershell.exe .\testarg.ps1 "first arg" "second arg"
는 일치하지 않는 결과를 제공
powershell.exe .\testarg.ps1 'first arg' 'second arg'
을하지만이 종종 때 가능한 아니다 스크립트는 자동으로 인수를 생성하고 전달하는 GUI 도구 및/또는 따옴표 사용의 일관성을 이유로 더 많은 CLI 도구가있는 경우 실행됩니다. 어떤 이유
는-file
옵션을 사용하는 경우 : 큰 따옴표가 제대로 작동
-file
옵션 그래서
Arg0 = first arg
Arg1 = second arg
:
powershell.exe –file .\testarg.ps1 "first arg" "second arg"
::(reference to relative path '.\' is optional)
내가 다시 의도 한 결과를 얻을. 나는 간단하게 작성하여 의도 한 결과를 얻을 수 FTYPE 협회 감안할 때
FTYPE Microsoft.PowerShellScript.1=C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -file "%1" %*
:이 하나가 같은 것으로 (FTYPE.exe
와) ps1
파일을 Windows 파일 형식 연결을 다시 매핑 할 수 있습니다 제안
testarg.ps1 "first arg" "second arg"
후자는 나를 위해 매우 만족하지만, 내가 PowerShell을 초보자 오전부터 궁금해 : 일반적인 스크립트에 대한
- 배치 형태 012,397,045입니다및 대화 형 양식 (PowerShell 내에서)
PS > path\to\script.ps1
에 상응합니까? 두 가지 형식이 서로 다른 출력/효과를 낼 수있는 경우가 있습니까? - 스크립트 안에 명령 줄을 읽을 수있는 가능한 해결책이 있습니까 (따옴표를 제거하지 않고)?
cmd.exe
의 경우*%
과 같은 것입니다.testarg.ps1 "first arg" "second arg"
내부 배치 당신이 호출됩니다
'Microsoft.PowerShellScript.1을 '를 PowerShellScript.exe로 입력하십시오. 어쨌든 나는 더 명확하게하기 위해 원래의 질문을 다시 썼다. – antonio
명령 프롬프트에서 'powershell -f testarg.ps1 "첫 번째 arg" "두 번째 arg"'가 방법입니다. 그러나, 참고로, 'powershell. \ testarg.ps1' ""first arg "" "" "second arg" ""'역시 같은 결과를 가져옵니다. 하지만 이것은 파일 형식 연결에 도움이되지 않습니다 ... – mousio