【问题标题】:Powershell - How to pass arguments with apostrophes in them?Powershell - 如何传递带有撇号的参数?
【发布时间】:2021-11-10 16:48:12
【问题描述】:

我正在使用第三方工具进行一些广告操作。我运行一个 powershell 脚本并向它传递参数。

一切都有效,除非该参数包含一个撇号,例如 Jerry O'Connor。我尝试了很多不同的逃生组合,但都没有运气。

这是我的命令:script.ps1 -name "'%name%'",名字包含 Jerry O'Connor。

错误是

Result:The string is missing the terminator: '.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString

我试过了:

  • script.ps1 -name "'%name%'"
  • script.ps1 -name \"%name%\"
  • script.ps1 -name ''name''

都出现同样的错误。

如果你在 PS CMD 级别运行它,你会看到错误

powershell echo -name "'Jerry O'Connor'"

有人知道如何将参数传递给script.ps1 -name "name",其中该参数包含撇号吗?

干杯

【问题讨论】:

  • 当我刚刚清理旧的 cmets 并遇到了你以前的问题时,我想知道是否是时候重新审视基础知识了(见下一条评论)——尽管令人困惑的是你已经接受了 一些回答你以前的问题,但我真的没有看到一个模式。也许您可以分享您的思考过程?
  • 请允许我给你一个标准的建议给新手:如果你 accept 一个答案,你将帮助未来的读者,向他们展示解决了你的问题的方法。要接受答案,请单击答案左侧大数字下方的大 ✓ 符号(您将获得 2 点声望)。如果您至少有 15 个声望点,您还可以对其他有用的答案进行投票(也可以选择已接受的答案)。如果您的问题尚未解决,请提供反馈,或者,如果您自己找到了解决方案,请self-answer

标签: powershell escaping quoting


【解决方案1】:

您需要转义任何 ' 字符。在 %name% 的值内作为 '' 使它们在单引号 PowerShell 字符串中工作,从 cmd.exe 可以使用 %name:'=''%

来自cmd.exe/一个批处理文件:

powershell.exe -Command ./script.ps1 -name "'%name:'=''%'"

如果%name% 包含逐字的Jerry O'Connor,则上述内容将扩展为以下内容,这应该可以按预期工作:
powershell.exe -Command ./script.ps1 -name "'Jerry O''Connor'"


但是,如果您使用 -File CLI 参数而不是 -Command,则可以简化引用:

powershell.exe -File ./script.ps1 -name "%name%"

另见:

  • 有关何时使用-Command-File 的指导,请参阅this answer

  • 有关 PowerShell CLI 的全面概述,请参阅 this answer

【讨论】:

    【解决方案2】:

    尝试如下所示的转义字符:

    $Test = "`'test`'"
    $Test
    

    【讨论】:

    • @Mogash 因此,如果我将参数作为名为 name 的变量传递。它是如何完成的?即:script.ps1 -name "name" 尝试 $test="Jerry O'Connor"
    • script.ps1 -Name "Jerry O`'Connor"
    • `-escaping 不适用于此处,因为 PowerShell 最终看到的内容 - 在从 cmd.exe 调用时进行命令行解析后,剥离了 " - 是一个 单引号的字符串,并且为了在这样的字符串中嵌入单引号,您必须将它们 加倍'Jerry O''Connor'
    • 另外,在 PowerShell ' 内不需要在 "..." 内转义;在您的示例中,"'test'" 可以。
    • 我发现我以前的 cmets 很糟糕。 @mklement0 是对的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 2014-10-21
    • 2015-06-16
    • 1970-01-01
    • 2013-06-15
    • 2021-06-17
    • 1970-01-01
    相关资源
    最近更新 更多