首页 > 解决方案 > 如何在 Invoke-Expression -Command 中转义“at 符号”(@)?

问题描述

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

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

现在我认为问题在于“at character”(“@”)在某种程度上被解释。但我未能使用多种方法逃脱它。如何做到这一点?

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

标签: powershellescapingpowershell-5.0

解决方案


停止使用双引号,如果您没有可扩展的内容,请使用单引号。请参阅about_Quoting_Rules的文档

否则就像其他人所说,使用反引号(`)。


推荐阅读