转义引号和双引号
我对Powershell相当陌生,而且我想知道如何正确地逃避-param值中的引号。
$cmd="\\server\toto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'"" Invoke-Expression $cmd
这当然是失败的,我试图逃避引号(单和双)使用转义字符`并做了各种组合,但没有任何工作。 请帮忙
像这样的转义参数通常是挫败感的来源,感觉很像浪费时间。 我看到你在v2上,所以我会build议使用Joel“Jaykul”Bennet 在不久之前
长话短说:你只是用@'…'来包装你的string@:
Start-Process \\server\toto.exe @' -batch=B -param="sort1;parmtxt='Security ID=1234'" '@
(请注意,我假设需要哪些引号,以及您试图转义哪些内容)如果要使用输出,则可能需要添加-NoNewWindow开关。
顺便说一句:这是非常重要的问题,因为从v3开始,你可以使用--%
来阻止PowerShellparsing器对你的参数做任何事情:
\\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',这就是我决定在哪里把反引号。
@'…'@语法被称为“这里的string”,并将返回正确的内容。 您也可以使用它们以下列方式填充variables:
$cmd=@' "\\server\toto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'"" '@
如上所示,开始和结束符号必须位于其自己的行上。
我试图通过nodejs模块运行一个命令,发现自己处于类似的困境:
我正在使用PowerShell并尝试运行:
command -e 'func($a)'
但是有了额外的符号,PowerShell正在破坏这个论点。 为了解决这个问题,我回复了双引号:
command -e `"func($a)`"
我希望这可以帮助别人。