2011-09-11 24 views
13

Mam następujący drzewo katalogów:Jak wywołać inny skrypt PowerShell ze ścieżką względną?

e:\powershell\services\This-Script-Here-Should-Call-Press any key to continue.ps1 
e:\powershell\utils\Press any key to continue.ps1 

i teraz chciałbym wywołać skrypt o nazwie „naciśnij dowolny klawisz, aby continue.ps1”, który znajduje się w „utils” -folder ze skryptu, że w folderze "usługi". Jak mogę to zrobić? Nie mogę wymyślić względnej ścieżki.

starałem się zrobić to w ten sposób:

"$ '.\..\utils\Press any key to continue.ps1'" 

ale to nie działa.

+0

Możliwy duplikat: http://stackoverflow.com/q/6816450/2291 (chociaż ten nie jest specyficzny dla ścieżek względnych) –

Odpowiedz

21

podstawie tego, co robisz, następujące powinny działać:

& "..\utils\Press any key to continue.ps1" 

lub

. "..\utils\Press any key to continue.ps1" 

(odnośnika różnicę pomocą & i . i zdecydować, który z nich korzystać)

To jak sobie radzić w takich sytuacjach (i niewielką zmianę do tego, co wspomniano @Shay):

$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path 
$utilsDir = Join-Path -Path $scriptDir -ChildPath ..\utils 

& "$utilsDir\Press any key to continue.ps1" 
+30

Łącze do & i. byłoby miło. Niezupełnie wyrażeń wyszukiwania przyjaznych dla Google. –

+4

Jeśli ktoś chce zrozumieć & &, jest skrótem do "Wyrażenia-Wywołania" - zobacz http://technet.microsoft.com/en-us/library/ee176880.aspx –

+10

dla tych, którzy wciąż próbują problemów znaleźć różnicę między. i & patrzeć na poniższym blogu: http://rkeithhill.wordpress.com/2007/11/24/effective-powershell-item-10-understanding-powershell-parsing-modes/ TL; DR ”. " wywołuje skrypt i działa w bieżącym zakresie "&" wywołuje skrypt i działa w innym przedziale potomnym i jest wyrzucany – stanleykylee

5

Puy następującej funkcji w skrypcie wywołującym dostać swoją ścieżkę katalogu i dołącz ścieżkę utils wraz z nazwą skryptu:

# create this function in the calling script 
function Get-ScriptDirectory { Split-Path $MyInvocation.ScriptName } 

# generate the path to the script in the utils directory: 
$script = Join-Path (Get-ScriptDirectory) 'utils\Press any key to continue.ps1' 

# execute the script 
& $script 
+0

występują dwa problemy z tym rozwiązaniem: 1. - nie jest to tym, co próbuję osiągnąć, ponieważ katalog "ulits" nie jest podkatalogiem "usług" "i muszę opuścić" usługi ", a następnie wprowadzić" utils ", aby wywołać odpowiedni skrypt. 2nd - nazwa skryptu - właściwość jest pusta. Zmieniłem to pytanie, aby było jaśniejsze. – t3chb0t

+0

To naprawdę zależy od katalogu roboczego konsoli (wpisz pwd w twojej konsoli). Jeśli chcesz użyć ścieżek względnych, musisz najpierw przejść do katalogu ze skryptami źródłowymi, a następnie użyć pliku .. \ folder \ script.ps1. Czy na pewno program Get-ScriptDirectory nie zwraca folderu nadrzędnego skryptu wywołującego? –

+0

moje złe. Musiałem nadzorować coś, co rzeczywiście działa funkcja Get-ScriptDirectory. – t3chb0t

Powiązane problemy