完全なパスを指定せずにスクリプトAからスクリプトBを呼びたいと思います。 私は試しました私は(スクリプト内の)同じフォルダからファイルを呼び出すには
.\scriptb.ps1
しかし、それは動作しません。 本当にパス全体を指定する必要がありますか?
(これは非常に基本的な質問には申し訳ありませんが、Googleは私を助けることができなかった!)完全なパスを指定せずにスクリプトAからスクリプトBを呼びたいと思います。 私は試しました私は(スクリプト内の)同じフォルダからファイルを呼び出すには
.\scriptb.ps1
しかし、それは動作しません。 本当にパス全体を指定する必要がありますか?
(これは非常に基本的な質問には申し訳ありませんが、Googleは私を助けることができなかった!)次のように$MyInvocation
を使用可能です:私が使用
$thisScriptDirectoryPath = Split-Path -parent $MyInvocation.MyCommand.Definition
$utilityScriptName = "ScriptB.ps1"
$utilityScript = (Join-Path $thisScriptDirectoryPath $utilityScriptName)
$result = . $utilityScript "SomeParameter"
ありがとうございます。それは私が過去にしたことですが、もっと良い方法があると思いました! $ workingdir =分割パス$ MyInvocation.MyCommand.Path -Parent \t#現在の作業ディレクトリを取得します 。 $ workingdir \ functions.ps1 – Sune
。\ scriptb.ps1はそれがまだどこから呼び出されたかに依然として完全に依存しているからです。私はそれが醜いことを知っている:) –
なぜMicrosoftはすべてのことを複雑にしなければならないのですか? –
。\相対パスです。あなたが現在いる場所に相対的です。たとえば、c:\にありますが、スクリプトd:\ 1.ps1を呼び出している場合、\はドライブcになります。
さらにいくつかのトリックがあります。 cdを使用してスクリプトから場所を変更することができます。例:
。ファイルが物理的にある場所に移動してそこから実行する場合は、\がうまくいきます。
:これについて
$executingScriptDirectory = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
$scriptPath = Join-Path $executingScriptDirectory "scriptb.ps1"
Invoke-Expression ".\$scriptPath"
:あなたのメインスクリプト、スクリプトAインサイド
& $pwd\scriptb.ps1
私はバッチファイルから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
は、もう少し情報を提供することはできますか?スクリプトAの内容が現在の場所を変更する可能性はありますか? –