是否可以将引号保留在$args
?
脚本的调用如下:
.\test1.ps1 a=application o="this object" msg_text="this is a text"
报价是进一步处理的必要条件。有没有办法将它们保留在$args
内?
答案 0 :(得分:2)
我无法修改输入参数的唯一方法仍然需要修改稍微调用的命令。
为了保留引号,可能尝试捕获调用PowerShell脚本的完整命令行。
所以我把它放在test1.ps1脚本中:
Write-Host (Get-WmiObject -Query "select CommandLine from Win32_Process where CommandLine like '%test1%'").CommandLine
然后,如果以这种方式调用脚本,则返回此内容:
PS C:\temp> powershell .\test1.ps1 a=application o="this object" msg_text="this is a text"
"C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe" .\test1.ps1 a=application "o=this object" "msg_text=this is a text"
这只有在调用PowerShell的新实例时才有可能,否则此方法将无法使用这些参数:
PS C:\temp> .\test1.ps1 a=application o="this object" msg_text="this is a text" > zzz3.txt
PS C:\temp>
当然,如果采用这种方法,则需要手动解析输入参数,这可以通过$args
对象的帮助来完成。这是一个长镜头,但确实保留了报价。
答案 1 :(得分:2)
您可以使用反引号在PowerShell中转义引号:
.\test1.ps1 a=application o="`"this object`"" msg_text="`"this is a text`""
您也可以在单引号中嵌套双引号(反之亦然)但请注意,变量不会在用单引号分隔的字符串中进行求值。
.\test1.ps1 a=application o='"this object"' msg_text='"this is a text"'
此外,为什么要使用$args
?为什么不使用功能强大的内置参数系统?
进一步阅读:
Stack Overflow - How to Handle Command Line Arguments in PowerShell