2014-02-10 4 views
2

Может кто-нибудь объяснить мне, почему:Powershell | Невозможно выполнить команду с пробелами

iex "C:\Program Files\test\test.exe" 

Возвращает:

C: \ Program: Термин 'C: \ Program' не распознается как имя командлета, функции, файла сценария или операционной системы . Проверьте правильность написания имени или, если включен путь, проверьте правильность пути и повторите попытку. В строке: 1 char: 1 + C: \ Program Files \ test \ test.exe + ~~~~~~~~~~ + CategoryInfo: ObjectNotFound: (C: \ Program: String) [], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException


Я пытался получить эту работу несколько различных способов:

  • обернув текст в ()
  • Ввод строки в переменную и передать его в качестве переменной вместо
  • Используя одиночные кавычки
  • Используя двойные кавычки

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


после ответил пример

вопрос был дан ответ. Вот то, что я пытался получить работу:

$tool = "C:\Windows\System32\cmd.exe" 
$param = "/c ping google.com -n 1" 
$test = & $tool $param 
Write-Host $test 

Оказывается, что линия с & не работает с двойными кавычками "" в данном случае, и на самом деле работали без них. Я думаю, что это связано с тем, что есть аргументы/параметры.

ответ

4

Используйте оператор & вместе с кавычками:

& "C:\Program Files\test\test.exe" 

От help about_operators:

& Call operator 
    Runs a command, script, or script block. The call operator, also known as 
    the "invocation operator," lets you run commands that are stored in 
    variables and represented by strings. Because the call operator does not 
    parse the command, it cannot interpret command parameters. 

     C:\PS> $c = "get-executionpolicy" 
     C:\PS> $c 
     get-executionpolicy 

     C:\PS> & $c 
     AllSigned 
+0

Так это дело только не потому, что это вызов исполняемого файла в , и ДОЛЖЕН предшествовать символ '&'? –

+1

Вам нужно использовать кавычки из-за пробела, но когда вы это сделаете, PowerShell думает, что вы только что ввели строку. Например, если вы введете '' hello'' в кавычки, PowerShell не попытается его выполнить. Это просто строка. Вот почему вам нужен оператор & «вызова», когда строка представляет собой команду. –

+0

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

Смежные вопросы