我正在尝试通过批处理文件下载 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 -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
"..."
,这仍然有效,因为 PowerShell 在将结果解释为之前只是通过空格连接多个 参数PowerShell 源代码。
"..."
,在这种情况下,使用
\"
作为 embedded
"
可能会在特定情况下中断(在这种情况下,由于
&
),因此需要更复杂的解决方法:"^""
(原文如此)与 powershell.exe
,以及 ""
与 pwsh.exe
,PowerShell(核心)CLI:请参阅
"&"
这样,
它将作为字符串的一部分传递。 如果我每次尝试输入这样的内容:
open & close
它会说:“不要忘记在 & 符号两边加上引号。” 我再试一次,但这一次,像这样:
"open & close"
这次,它将显示
open and close
并且不会给我那个错误。