Как включить амперсанды в команду PowerShell в командном файле?

Я пытаюсь загрузить лист 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"

Ошибка:

Использование символа амперсанда (&) запрещено. Оператор & зарезервирован для использования в будущем; заключите амперсанд в двойные кавычки («&»), чтобы передать его как часть строки.

Как заключить амперсанд в кавычки, не разрывая внешние кавычки для параметра Command?


person Sarah Northway    schedule 28.02.2019    source источник
comment
Вы пытались заключить URL-адрес в одинарные кавычки?   -  person Olaf    schedule 28.02.2019
comment
Ага да спасибо что сработал Олаф!   -  person Sarah Northway    schedule 28.02.2019


Ответы (1)


URL-адрес, встроенный в строку "...", переданную в powershell -Command, также должен быть заключен в кавычки, потому что не заключенный в кавычки & имеет особое значение и для PowerShell (хотя в Windows PowerShell в настоящее время зарезервирован только для будущего использования; в PowerShell Core его можно использовать пост-позиционно для выполнения команды в качестве фонового задания).

Самый простой вариант - использовать встроенное '...' цитирование, как предлагает Олаф, поскольку ' символов. не нужно убегать внутрь "...". '...' строки в PowerShell - это буквальные строки, что в этом случае нормально, учитывая, что URL-адрес не содержит ссылок на переменные.

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

Если встроенные "..." кавычки необходимы для интерполяции строк, используйте \" (sic), чтобы экранировать встроенные (") символы. (обратите внимание, что внутри PowerShell вместо этого вам нужно использовать `" или ""):

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