Powershell 如何在Invoke Expression-Command中转义“at sign”(@)?

Powershell 如何在Invoke Expression-Command中转义“at sign”(@)?,powershell,escaping,powershell-5.0,Powershell,Escaping,Powershell 5.0,当我在命令行中运行此命令时,它会按预期工作: C:\>p4 changes @2019/01/16,@now ... 但当我在powershell脚本中使用它时,我无法让它工作 第一次尝试: PS C:\> Invoke-Expression -Command "p4 changes @2018/01/16, @now" Invoke-Expression : At line:1 char:25 + p4 changes @2018/01/16, @now +

当我在命令行中运行此命令时,它会按预期工作:

C:\>p4 changes @2019/01/16,@now
...
但当我在powershell脚本中使用它时,我无法让它工作

第一次尝试:

PS C:\> Invoke-Expression -Command "p4 changes @2018/01/16, @now"
Invoke-Expression : At line:1 char:25
+ p4 changes @2018/01/16, @now
+                         ~~~~
Splatted variables like '@now' cannot be part of a comma-separated list of arguments.
At line:1 char:1
+ Invoke-Expression -Command "p4 changes @2018/01/16, @now"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ParserError: (:) [Invoke-Expression], ParseException
    + FullyQualifiedErrorId : SplattingNotPermittedInArgumentList,Microsoft.PowerShell.Commands.InvokeExpressionCommand
成功转义逗号:

PS C:\> Invoke-Expression -Command "p4 changes @2018/01/16',' @now"
p4 : Unintelligible revision specification '2018/01/16'.
At line:1 char:1
+ p4 changes @2018/01/16',' @now
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Unintelligible ...n '2018/01/16'.:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
现在我认为问题在于在某种程度上对字符@进行解释。但我用多种方法都没能逃脱。如何做到这一点

UPD测试您的想法:

庄重的口音:

PS C:\> Invoke-Expression -Command "p4 changes `@2018/01/16',' `@now"
p4 : Unintelligible revision specification '2018/01/16'.
At line:1 char:1
+ p4 changes @2018/01/16',' @now
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Unintelligible ...n '2018/01/16'.:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
逗号的单引号问题:

PS C:\> Invoke-Expression -Command 'p4 changes @2018/01/16, @now'
Invoke-Expression : At line:1 char:25
+ p4 changes @2018/01/16, @now
+                         ~~~~
Splatted variables like '@now' cannot be part of a comma-separated list of arguments.
At line:1 char:1
+ Invoke-Expression -Command 'p4 changes @2018/01/16, @now'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ParserError: (:) [Invoke-Expression], ParseException
    + FullyQualifiedErrorId : SplattingNotPermittedInArgumentList,Microsoft.PowerShell.Commands.InvokeExpressionCommand

停止使用双引号,如果没有可展开的内容,请使用单引号。有关详细信息,请参阅文档

否则,正如其他人所说,使用backtick`.

工作解决方案:

$cmd = @'
p4 changes @2018/01/16','@now
'@;    
Invoke-Expression $cmd

尝试使用单引号代替双引号@Avshalom not working,因为我必须用单引号转义逗号。也许有另一种方法可以避开逗号,它会起作用吗?请参阅updateIs p4可执行文件?2016年1月2019日尝试p4-%@now@MathiasR.Jessen是的,是Perforce客户机。当我在命令行中运行您的命令时,它不起作用,建议检查:p4-h的用法。为什么要使用Invoke表达式?p4更改“@2019/01/16,@now”或p4更改@2019/01/16,@now应该有效吗?