2011-09-11 24 views
13

私は、次のディレクトリツリーがあります。相対パスで別のPowerShellスクリプトを呼び出すにはどうすればよいですか?

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

を、今、私は名前のスクリプトIスクリプトから「utilsの」-folderに座っている「を押しcontinue.ps1に任意のキーを」呼び出すしたいと思います「サービス」 - フォルダーにあります。それ、どうやったら出来るの?私は相対的な経路を把握することはできません。

私はそれをこのように実行しようとしました:

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

をそれはうまくいきませんでした。

+0

可能な重複:http://stackoverflow.com/q/6816450/2291(これは相対パスに固有のものではありませんが) –

答えて

21

は、次のように動作するはずです:

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

又は

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

(を使用して差を検索と.

は、これは私がこのような状況(および@Shayが言及したものにわずかな変化)を処理する方法である)を使用するかを決定します

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

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

&とのリンク。いいだろう。正確にGoogleフレンドリーな検索式ではありません。 –

+4

他の誰かが&を理解したい場合は、「Invoke-Expression」のショートカットです。http://technet.microsoft.com/en-us/library/ee176880.aspx –

+10

を参照してください。の違いを見つける。そして&次のブログを見て: http://rkeithhill.wordpress.com/2007/11/24/effective-powershell-item-10-understanding-powershell-parsing-modes/ TL; DR 」。 "スクリプトを呼び出して現在のスコープで実行します "&"スクリプトを呼び出し、別の子スコープで実行され、破棄されます。 – stanleykylee

5

ピュイ呼び出し元のスクリプトに次の関数は、そのディレクトリのパスを取得し、スクリプト名と一緒にutilsのパスに参加する:あなたは何をしていたに基づいて

# 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

この解決方法には2つの問題があります。第1は、これは "ulits"ディレクトリが "services"のサブディレクトリではないためです"私は"サービス "を残し、次に" utils "を入力して適切なスクリプトを呼び出さなければなりません。 2番目 - ScriptName - プロパティは空です。私は質問を編集して、それがより明確になるようにしました。 – t3chb0t

+0

本当にコンソールの作業ディレクトリ(コンソールのpwd)に依存します。相対パスを使用する場合は、最初にソーススクリプトディレクトリにcdして..¥folder¥script.ps1を使用する必要があります。 Get-ScriptDirectoryが呼び出し元のスクリプトの親フォルダを返さないことは確かですか? –

+0

私の悪い。私はGet-ScriptDirectory関数が実際に働く何かを監督したに違いありません。 – t3chb0t

関連する問題