转义引号和双引号

我对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)`" 

我希望这可以帮助别人。