Как правильно избежать кавычек в -param
значении в следующей командной строке?
$cmd="\\server\toto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'""
Invoke-Expression $cmd
Конечно, это не удается. Я попытался избежать кавычек (одинарных и двойных) с помощью escape-символа `и сделал различные комбинации, но ничего не работает.
powershell-2.0
Eetawil
источник
источник
$someCommandStringWithDoubleQuotes | cmd
. Это действительно работает из сценариев PowerShell (например, при вызове CMake (для этого требуются двойные кавычки (в противном случае он автоматически завершится ошибкой))). Альтернативой CMD является bash.exe ( MinGW ), но при некоторых обстоятельствах он может запускаться очень и очень медленно.Ответы:
Ускользание от таких параметров обычно вызывает разочарование и кажется потраченным впустую временем. Я вижу, что у вас v2, поэтому я бы предложил использовать технику, о которой Джоэл «Jaykul» Беннет недавно написал в блоге .
Короче говоря: вы просто оборачиваете строку с помощью @ '...' @:
(Помните, что я предположил, какие кавычки необходимы, а какие вещи вы пытаетесь избежать.) Если вы хотите работать с выводом, вы можете добавить
-NoNewWindow
переключатель.Кстати: это была настолько важная проблема, что, начиная с v3, вы можете использовать,
--%
чтобы парсер PowerShell не делал ничего с вашими параметрами:... там должно работать нормально (с тем же предположением).
источник
@"
и"@
вместо этого.Я могу использовать обратную кавычку (`), если я помещаю их в следующие места:
$cmd
возвращается как:Это то, что вы искали?
Ошибка, выданная PowerShell, относилась к неожиданному токену sort1, и именно так я определил, где поставить обратные кавычки.
Синтаксис @ '...' @ называется "здесь строкой" и возвращает именно то, что было введено. Вы также можете использовать их для заполнения переменных следующим образом:
Открывающий и закрывающий символы должны располагаться на отдельной строке, как показано выше.
источник
Invoke-Expression
удаляет ли двойные кавычки$cmd
при его вызове? Или как пользовались$cmd
без использованияInvoke-Expression
?Сегодня я оказался в аналогичном затруднительном положении, когда пытался запустить команду через модуль Node.js:
Я использовал PowerShell и пытался запустить:
Но с дополнительными символами PowerShell искажала аргументы. Чтобы исправить это, я сделал обратную галочку в двойных кавычках:
источник
"['`"][^'`"]['`"]"
работает… но'[`'"][^`'"][`'"]'
не работает! сводил меня с ума