Примечание:
Этот ответ показывает как escape / quote символ @
. правильно в контексте обычных правил синтаксического анализа PowerShell.
Если ваша командная строка содержит только дословно аргументы - т.е. только литералы токены, а не PowerShell ссылки на переменные (например, $file
) или выражения (например, ($dir + '\script.ps1')
) - вы можете альтернативно разместить --%
, символ остановки разбора перед аргументом передачи s, как показано в ответ Васифа Хасана ; обратите внимание, что ссылки на переменные в стиле cmd.exe
, такие как %FOO%
, все еще расширяются, однако.
@
является метасимволом в PowerShell (символ с синтаксисом c, означающим [1] ), поэтому, чтобы передать его дословно до az
, необходимо либо указать весь аргумент или `
-экранирование @
индивидуально :
с именем файла сценария literal :
# Either: `-escape the @
az ... --scripts `@script.ps1
#`# Or: quote the whole argument
# Use '...' for a literal argument.
az ... --scripts '@script.ps1'
с именем файла сценария сохраненным в переменной , $file
:
# Either: `-escape the @
az ... --scripts `@$file
#`# Or: quote the whole argument
# Use "..." for an argument with variable references, i.e. an expandable string
az ... --scripts "@$file"
Примечание: вы могли бы просто получить @$file
в случае переменной, но учитывая, что это не не работает с любым символом. иное , чем $
после @
, лучше привыкнуть всегда цитировать / избегать дословно @
.
[1] @
имеет несколько синтактических c применений, а заданное c использование зависит от того, какой символ последует. В вашем случае @
в @script.ps1
было интерпретировано как оператор с переменной script
, а часть .ps1
интерпретирована как попытка доступа к свойству ps1
на эту переменную - отсюда сообщение об ошибке.