2012-02-22 9 views
9

完全なパスを指定せずにスクリプトAからスクリプトBを呼びたいと思います。 私は試しました私は(スクリプト内の)同じフォルダからファイルを呼び出すには

.\scriptb.ps1 

しかし、それは動作しません。 本当にパス全体を指定する必要がありますか?

(これは非常に基本的な質問には申し訳ありませんが、Googleは私を助けることができなかった!)

+0

は、もう少し情報を提供することはできますか?スクリプトAの内容が現在の場所を変更する可能性はありますか? –

答えて

8

次のように$MyInvocationを使用可能です:私が使用

$thisScriptDirectoryPath = Split-Path -parent $MyInvocation.MyCommand.Definition 

$utilityScriptName = "ScriptB.ps1" 
$utilityScript = (Join-Path $thisScriptDirectoryPath $utilityScriptName) 

$result = . $utilityScript "SomeParameter" 
+0

ありがとうございます。それは私が過去にしたことですが、もっと良い方法があると思いました! $ workingdir =分割パス$ MyInvocation.MyCommand.Path -Parent \t#現在の作業ディレクトリを取得します 。 $ workingdir \ functions.ps1 – Sune

+0

。\ scriptb.ps1はそれがまだどこから呼び出されたかに依然として完全に依存しているからです。私はそれが醜いことを知っている:) –

+0

なぜMicrosoftはすべてのことを複雑にしなければならないのですか? –

0

。\相対パスです。あなたが現在いる場所に相対的です。たとえば、c:\にありますが、スクリプトd:\ 1.ps1を呼び出している場合、\はドライブcになります。

さらにいくつかのトリックがあります。 cdを使用してスクリプトから場所を変更することができます。例:

。ファイルが物理的にある場所に移動してそこから実行する場合は、\がうまくいきます。

3

方法私が何を覚えておくのが簡単な名前を持つpowershell変数のために座る。

$PSScriptRoot\scriptb.ps1 
+0

これはスクリプト内で行うことができますか? – Sune

+0

申し訳ありませんが、疑問が誤解されました。新しい回答を投稿しました。 – mjolinor

0

:これについて

$executingScriptDirectory = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent 
$scriptPath = Join-Path $executingScriptDirectory "scriptb.ps1" 
Invoke-Expression ".\$scriptPath" 
6

:あなたのメインスクリプト、スクリプトAインサイド

& $pwd\scriptb.ps1 
0

私はバッチファイルからPowerShellスクリプトを実行すると.\config.ps1のように「が含まれる」の不具合を生じたことが判明した後、私は、この質問時に来ています。それを動作させるために

一つの方法は次のとおりです。どのようにスクリプトA呼んでいる:

$configFullPath = "$($pwd)\config.ps1" 
Write-Host "Config file full path = $configFullPath" 

#force is required just to make sure that module is not used from cache 
Import-Module -Force $configFullPath 
関連する問題