Подтвердить что ты не робот

Пробелы вызывают разделение по пути с помощью PowerShell

У меня возникла проблема с powershell при вызове exe по пути, содержащему пробелы.

PS C:\Windows Services > invoke-expression "C:\Windows Services\MyService.exe"

Термин "C:\Windows" не распознается как имя командлета, функции, файла script или исполняемой программы. Проверьте правильность написания имени или если путь был включен, проверьте правильность пути и повторите попытку.

Кажется, он разбивается на пространство между "Windows" и "Services". Любая идея, как обойти эту проблему?

4b9b3361

Ответ 1

Будет ли это делать то, что вы хотите?

& "C:\Windows Services\MyService.exe"

Ответ 2

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

$path = 'C:\Windows Services\MyService.exe'
$path -replace ' ', '` '
invoke-expression $path

Ответ 4

Не уверен, что кому-то все еще нужно... Мне нужно было вызвать msbuild в powershell и после полной работы:

$MSBuild = "${Env:ProgramFiles(x86)}\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe"

& $MSBuild $PathToSolution /p:OutDir=$OutDirVar /t:Rebuild /p:Configuration=Release

Ответ 5

Там хак, который я использовал, поскольку Invoke-Expression отлично работает для меня.

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

$currLocation = Get-Location
Set-Location = "C:\Windows Services\"
Invoke-Expression ".\MyService.exe"
Set-Location $currLocation

Это будет работать, только если exe не имеет пробелов в имени.

Надеюсь, что это поможет

Ответ 6

Для любого пути к файлу с пространством просто вставьте их в двойные кавычки, которые будут работать в Windows Powershell. Например, если вы хотите перейти в каталог Program Files, вместо использования

PS C:\> cd Program Files

который вызовет ошибку, просто используйте следующее решение этой проблемы:

PS C:\> cd "Program Files"

Ответ 7

Это сработало для меня:

$scanresults = Invoke-Expression "& 'C:\Program Files (x86)\Nmap\nmap.exe' -vv -sn 192.168.1.1-150 --open"

Ответ 8

Используя Powershell на Windows10 в 2018 году, то, что сработало для меня, было просто заменить двойные кавычки " простыми кавычками '. Добавление backtick перед пространством, как это было предложено в ответ, нарушило путь.

Ответ 9

Можно использовать . Точечный оператор.

. "C:\Users\user\AppData\Local\Programs\Microsoft VS Code\bin\code.cmd"

или команда Start-Process

Start-Process -PSPath "C:\Users\user\AppData\Local\Programs\Microsoft VS Code\bin\code.cmd"

или используя ProcessStartInfo и Process

$ProcessInfo = New-Object -TypeName System.Diagnostics.ProcessStartInfo
$ProcessInfo.FileName = 'C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe'
if($Admin){ $ProcessInfo.Verb = 'runas' }
$ProcessInfo.UseShellExecute = $false

$CommandParameters = '-noexit -noprofile -command Set-Location -LiteralPath c:\; $host.ui.RawUI.WindowTitle = ''[{0}] PS''; Set-PSReadlineOption -HistorySaveStyle SaveNothing;' -f $Cred.UserName
$ProcessInfo.Arguments = $CommandParameters
$ProcessInfo.Domain = ($Cred.UserName -split '\\')[0]
$ProcessInfo.UserName = ($Cred.UserName -split '\\')[1]
$ProcessInfo.Password = $Cred.Password

$ProcessObject = New-Object -TypeName System.Diagnostics.Process
$ProcessObject.StartInfo = $ProcessInfo
$ProcessObject.Start() | Out-Null

Ответ 10

Пожалуйста, используйте этот простой вкладыш:

Invoke-Expression "C:\'Program Files (x86)\Microsoft Office\root\Office16'\EXCEL.EXE"

Ответ 11

Попробуйте это, просто и без особых изменений:

выражение-выражение "C:\Windows Services\MyService.exe"

используя одинарные кавычки в начале и конце пути.

Ответ 12

Просто вставьте ${yourpathtofile/folder}
PowerShell не считает пробелы, чтобы PowerShell учитывал весь путь, включая пробелы, добавьте путь между $ { & }