PowerShell - прохождение рассчитанных путей с пробелами - PullRequest
10 голосов
/ 16 января 2012

Я пытаюсь что-то действительно простое здесь, но не могу понять, где я иду не так.Я нашел много других полезных обсуждений этого - особенно здесь - но не нашел ничего, что охватывало бы мой конкретный сценарий.

В powershell я набрал следующее:

$path = "c:\program files\"
$path2 = "c:\program files\fred2\"
echoargs $path $path2
echoargs "$path" "$path2"

В обоих вызовах echoargs я получаю

Arg 0 is <c:\program files" c:\program>
Arg 1 is <files\fred2">

в качестве результата.Как я могу получить параметры для правильной передачи?

NB: В моем реальном скрипте переменные пути построены из нескольких параметров конфигурации, поэтому я не могу просто передать их напрямую в одинарных кавычках.

Ответы [ 2 ]

18 голосов
/ 16 января 2012

Вам необходимо заключить строки результата в одинарные кавычки внутри области выполнения:

echoargs "'$path'" "'$path2'"

Это передаст их вызываемому приложению, разделенному внутри одинарных кавычек, но поскольку вся строка все еще в двойных кавычках, ваш параметр будет расширен правильно.

4 голосов
/ 16 января 2012

В последнем отбрасывании PSCX мы обновили EchoArgs.exe, чтобы также отображать всю командную строку в том виде, в каком ее видит принимающее приложение.В этом случае вы получите:

14 >  echoargs $path $path2
Arg 0 is c:\program files" c:\program
Arg 1 is files\fred2"

Command line:
"C:\Users\Keith\Documents\WindowsPowerShell\Modules\Pscx\Apps\EchoArgs.exe"  "c:\program files\" "c:\program files\fred2
\"

Казалось бы, что \" заставляет где-то экранировать двойную кавычку.Кстати, то же самое происходит в CMD.exe из того, что я могу сказать.Если вы изменили свои пути, чтобы удалить косую черту (или если вы использовали прямую косую черту), этого не произойдет.

20 >  $path = "c:\program files"
21 >  $path2 = "c:\program files\fred2"
22 >  echoargs $path $path2
Arg 0 is c:\program files
Arg 1 is c:\program files\fred2

Command line:
"C:\Users\Keith\Documents\WindowsPowerShell\Modules\Pscx\Apps\EchoArgs.exe"  "c:\program files" "c:\program files\fred2"

Если вы получите эти пути откуда-то еще, вы можете удалить обратную косую черту какитак:

$path = $path.TrimEnd("\")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...