2014-04-03 16 views
5

Im mój skrypt PS Chcę móc uruchomić inny skrypt w innym przypadku PS, wykonując następujące czynności:PowerShell Otwarcie Ścieżka pliku ze spacjami

$filepath = Resolve-Path "destruct.ps1" 

start-process powershell.exe "$filepath" 

destruct.ps1 jest w tym samym folderze co ten skrypt

jednak po uruchomieniu tego skryptu w miejscu, które zawiera spacje („C: \ Moje Scripts \”) i będzie się następujący błąd:

Określenie „C: \ My” nie jest rozpoznawana jako cmdletu , funkcja, program operacyjny lub plik skryptu. Zweryfikuj termin i spróbuj ponownie.

Wiem, że używając metody "Invoke-Expression" rozwiązano ten problem, jak mogę zrobić to samo, ale używając metody start-process?

Wielkie dzięki za pomoc!

Odpowiedz

7

Spróbuj tego:

start-process -FilePath powershell.exe -ArgumentList "-file `"$filepath`"" 

zmienił po komentarzach:

start-process -FilePath powershell.exe -ArgumentList "-file `"$($filepath.path)`"" 

marginesie:

$filepath to typ typu [pathinfo], a nie [string].

+0

Witam, przykro mi, że to nie działa:/To nie jest podobne do parametru -FilePath lub -ArgumentList: 'Nie można znaleźć parametru pasującego do nazwy' FilePath '.. samo z' ArgumentList '. Im przy użyciu "Resolve-Path" ustawić $ filepath .. Czy to ma znaczenie? Wielkie dzięki za pomoc everyones – user3402227

+0

@ user3402227 Zamieść dokładnie ten kod, którego używasz ... w ten sposób musi działać! ;) –

+0

Zaktualizowałem swój post z odpowiednim kodem! Bardzo dziękuję – user3402227

8

Możesz dodać uciekł cudzysłowów tak, aby zdać kwotowań argument:

"`"$filepath`"" 
+0

Innym rozwiązaniem byłoby użycie apostrofów na „zewnątrz”, tak, że cudzysłowy będą traktowane jako literały. –

+2

Następnie otrzymujesz podwójne cudzysłowy, ale ścieżka $ nie rozwija się. Rozwija się, jeśli umieścisz go w cudzysłowach w cudzysłowach, ale wiersz poleceń nie odpowiada pojedynczym cudzysłowom. – mjolinor

+0

Hej, bardzo dziękuję za pomoc. Niestety to nadal nie działa? Mając $ filepath bez spacji działa, ze spacjami nie ... – user3402227

2

Odpowiadam tutaj za ogólny scenariusz.

Jeśli potrzebujesz, aby przejść do folderu, na przykład C:\Program Files z Powerhsell następujące polecenie nie zadziała, ponieważ ma spacji między ścieżki.

cd C:\Program Files

Zamiast osadzić ścieżkę z cudzysłowach jak jak poniżej.

cd "C:\Program Files"

0

Nazwa pliku może zawierać spacji, więc zachować przestrzenie w pełnej ścieżce:
Notepad ++ polecenia exec:
"C: \ Windows \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "& \ "$ (FULL_CURRENT_PATH) \"”

samo z wiersza poleceń:
"C: \ Windows \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "& \" C: \ a_work \ System \ nazwa ze spacjami .ps1 \ ""

0

wszelki wypadek [ciąg] $ shipno (co jest ścieżka & nazwa pliku) jest w tym spacje dodaje pozwala mu zostać przekazane do -FilePath powodzeniem:

if ($shipno.contains(" ") -eq $true) { 
    $shipno = """" + $shipno + """" 
} 
0

myślę, że powinienem dodać tę odpowiedź, ponieważ pracował dla mnie jak magia.Daję link, a następnie zrzut ekranu enter link description hereenter image description here

Uwaga: Ten komentarz oraz enter image description here