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

How do I include ampersands in a powershell command in a batch file?

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

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

当我通过添加 &gid=1234 指定我想要的 sheet/tab 时,这中断了:

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

错误是:

The ampersand (&) character is not allowed. The & operator is reserved for future use; wrap an ampersand in double quotation marks ("&") to pass it as part of a string.

如何在不破坏 Command 参数的外部引号的情况下将 & 符号括在引号中?

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

最简单的选择是使用嵌入的 '...' 引号,正如 Olaf 所建议的,因为 ' 个字符。不需要在 "..." 内转义。 PowerShell 中的 '...' 字符串是 文字 字符串,在这种情况下很好,因为 URL 不包含变量引用。

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

如果字符串插值需要嵌入 "..." 引号,请使用 \" (sic) 转义嵌入 (") 字符. (请注意 inside PowerShell,您需要使用 `""" 代替):

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