2013-08-30 11 views
21

Mam problem z powershell podczas wywoływania exe w ścieżce zawierającej spacje.Spacje powodują podział na ścieżkę z PowerShell

PS C: \ Windows Usługi> wywołać ekspresję "C: \ Windows Services \ MyService.exe"

Termin 'C: \ Windows' nie jest rozpoznawana jako nazwy apletu polecenia, funkcja , plik skryptu lub działający program. Sprawdź pisownię nazwy lub jeśli ścieżka została uwzględniona, sprawdź, czy ścieżka jest prawidłowa i spróbuj ponownie.

Wygląda na to, że dzieli się na przestrzeń między "Windows" i "Usługi". Masz pomysł, jak obejść ten problem?

Odpowiedz

30

zrobi to, co chcesz ?:

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

Ok, to wydaje się działać, ale tylko wtedy, gdy uruchamiam z wiersza poleceń. Jeśli umieściłem go w skrypcie z powłoką powershell, otrzymam komunikat "Wyrażenie po" & "w elemencie potoku spowodowało błąd nieprawidłowego obiektu. – jaffa

+2

Przepraszam, że DID działa, mój błąd. – jaffa

11

Można uciec z miejsca przy użyciu pojedynczych cytatów i znaku odwróconego apostrofu przed przestrzeni:

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

Problem z tym rozwiązaniem polega na tym, że ścieżka jest przekazywana jako argument i nie mogę kontrolować, w jaki sposób została zmieniona. – jaffa

+0

Możesz po prostu wykonać '-replace' na zmiennej zawierającej ścieżkę i zamienić '' na ''' –

2

istnieje hack Użyłem od Wyrażenie Invoke-Express działa dobrze dla mnie.

Można ustawić bieżącą lokalizację do ścieżki ze spacjami, wywołać ekspresję, wrócić do swojego poprzedniego położenia i kontynuować:

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

ta będzie działać tylko wtedy, gdy exe nie ma żadnych spacji jego nazwa.

Nadzieja to pomaga

1

Nie wiem, czy ktoś jeszcze potrzebuje ... Ja potrzebne do wywołania msbuild w PowerShell, a następnie pracował w porządku następuje:

$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