Передача аргумента с одной кавычкой в ​​скрипт .PS1 - PullRequest
0 голосов
/ 25 июня 2019

Я тестирую сценарий PS, который будет помещен в контекстное меню правой кнопки мыши win10, сценарий просто принимает информацию о пути и затем выводит ее в окно моего терминала.Раздел реестра выглядит следующим образом: Computer\HKEY_CLASSES_ROOT\*\shell\MyScript\command @="powershell.exe -window hidden -command .'\"G:\\path to my script\\MyScript.ps1\"' '%V'"

Сценарий просто $args.

Для большинства обычных путей он просто работает нормально.Теперь я застрял в ситуации, когда имя файла содержит одну одинарную кавычку, например: "D:\John's file.txt".

Выдает ошибку:

The string is missing the terminator: '. + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString

Что я должен сделать, чтобы решить эту проблему?

1 Ответ

0 голосов
/ 25 июня 2019

Я сам нашел решение.

  1. Согласно этой записи Запись в реестре должна быть изменена на: Computer\HKEY_CLASSES_ROOT\*\shell\MyScript\command @="powershell.exe -window hidden -file \"G:\\path to my script\\MyScript.ps1\" "%V""

Вместо -command, используя -file, и одинарные кавычки вокруг %V должны быть двойными.

2. Чтобы получить полный путь, вы должны объединить строки, разделенные пробелом, используя такой оператор -join (если путь содержит пробелы):

$path = $args -join " "

Пользователь Powershell v6 может использовать вместо этого командлет join-string.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...