Экранирование кавычек и двойных кавычек
Как мне правильно избежать кавычек в -param
значение в следующей командной строке?
$cmd="servertoto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'""
Invoke-Expression $cmd
Это, конечно, не удается. Я попытался избежать кавычек (одинарных и двойных), используя escape-символ ` и сделал различные комбинации, но ничего не работает.
3 ответа:
экранирование таких параметров обычно является источником разочарования и очень похоже на потерянное время. Я вижу, что вы находитесь на v2, поэтому я бы предложил использовать технику, которую Джоэл "Джейкул" Беннет блог о некоторое время назад.
короче говоря: вы просто обернуть строку с @' ... '@ :
Start-Process \server\toto.exe @' -batch=B -param="sort1;parmtxt='Security ID=1234'" '@
(имейте в виду, что я предположить какие цитаты необходимы, и какие вещи вы пытались избежать.) Если вы хотите работать с выводом, вы можете хотите добавить
-NoNewWindow
переключатель.кстати: это был настолько важный вопрос, что с V3 вы можете использовать
--%
чтобы парсер PowerShell ничего не делал с вашими параметрами:\server\toto.exe --% -batch=b -param="sort1;paramtxt='Security ID=1234'"
... там должно работать нормально (с тем же предположением).
использование backtick ( ` ) отлично работает для меня, если я помещаю их в следующие места:
$cmd="\server\toto.exe -batch=B -param=`"sort1;parmtxt='Security ID=1234'`""
$cmd
возвращает как:\server\toto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'"
это то, что вы искали?
ошибка PowerShell дала мне ссылку на неожиданный токен "sort1", и именно так я определил, куда поместить обратные палочки.
в @' ... '@синтаксис называется "здесь строка" и вернет именно то, что было введено. Вы также можете использовать их для заполнения переменных в следующим образом:
$cmd=@' "\server\toto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'"" '@
символы открытия и закрытия должны располагаться в отдельной строке, как показано выше.
я оказался в аналогичном затруднительном положении сегодня, пытаясь запустить команду через узел.модуль на JS:
Я использовал PowerShell и пытался запустить:
command -e 'func($a)'
но с дополнительными символами PowerShell искажал аргументы. Чтобы исправить, я отступил назад, избежав двойных кавычек:
command -e `"func($a)`"