如何在批处理文件的 powershell 命令中包含&符号?

问题描述 投票:0回答:2

我正在尝试通过批处理文件下载 Google 表格。这有效:

powershell -Command "Invoke-WebRequest https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/export?exportFormat=tsv -OutFile output.tsv"

当我通过添加 &gid=1234 来指定我想要的工作表/选项卡时,这会中断:

powershell -Command "Invoke-WebRequest https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/export?exportFormat=tsv&gid=1234 -OutFile output.tsv"

错误是:

不允许使用与号 (&) 字符。 & 运算符是保留的 供将来使用;将 & 符号放在双引号 ("&") 中以 将其作为字符串的一部分传递。

如何将 & 符号括在引号中而不破坏命令参数的外引号?

powershell batch-file google-sheets quoting
2个回答
17
投票

传递给

"..."
powershell -Command
字符串中嵌入的 URL 也必须加引号
,因为 an unquoted
&
对于 PowerShell 也有特殊含义
(尽管在 Windows PowerShell 中,它目前仅保留给将来使用)使用;在 PowerShell Core 中,可以在位置后使用它来将命令作为后台作业运行)。

最简单的选项是使用嵌入式 '...'

 引用
,如 Olaf 所建议,因为 '
 字符。不需要逃离内部
"..."
。 PowerShell 中的 
'...'
 字符串是 
literal 字符串,在本例中这很好,因为 URL 不包含变量引用。

powershell -Command "Invoke-WebRequest 'https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/export?exportFormat=tsv&gid=1234' -OutFile output.tsv"

如果字符串插值需要嵌入 "..."

 引号,请使用 
\"
(原文如此)转义嵌入的 (
"
) 字符。 (请注意,在 
inside PowerShell 中,您需要使用 `"
""
 代替):

powershell -Command Invoke-WebRequest \"https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/export?exportFormat=tsv&gid=1234\" -OutFile output.tsv
注:

  • 为了避免

    cmd.exe

     的预先解析出现问题,上面省略了 outer "..."
    ,这仍然有效,因为 PowerShell 在将结果解释为之前只是通过空格连接 
    多个
    参数PowerShell 源代码。

  • 在更复杂的情况下,您可能更喜欢使用外部
  • "..."

    ,在这种情况下,使用

    \"
    作为
    embedded
    " 可能会
    在特定情况下中断
    (在这种情况下,由于 & ),因此需要更复杂的解决方法:
    "^""
    (原文如此)与
    powershell.exe
    ,以及
    ""
    pwsh.exe
    ,PowerShell(核心)CLI:

    请参阅
      此答案
    • 了解更多信息。

0
投票
"&"

这样,

它将作为字符串的一部分传递。
如果我每次尝试输入这样的内容:

open & close

它会说:“不要忘记在 & 符号两边加上引号。”
我再试一次,但这一次,像这样:

"open & close"

这次,它将显示 
open and close

并且不会给我那个错误。

    

© www.soinside.com 2019 - 2024. All rights reserved.