「Split-Path」タグアーカイブ

PowerShellでスクリプトの絶対パス・実行フォルダを取得する方法

PowerShellスクリプトを書く際、
「実行中のスクリプト自身のパス」や
「そのスクリプトが置かれているフォルダ」を取得したいケースはよくあります。

特に以下のようなケースでは必須です:

  • ログファイルをスクリプトと同じフォルダに出力したい

  • スクリプトと同階層にある設定ファイル(config.json / .ini / CSV など)を読み込みたい

  • 相対パスではなく絶対パスで処理したい

  • バッチ(.cmd)から起動される場合でも確実に処理したい

この記事では、PowerShellでスクリプトの絶対パスとフォルダを取得する方法をわかりやすくまとめます。


🔎 実行中スクリプトの絶対パスを取得する

📌 解説

  • $MyInvocation.MyCommand.Path現在実行中の .ps1 ファイルの絶対パスを返します

  • エイリアス、コマンドライン引数、バッチ起動にも対応


📁 スクリプトの実行フォルダ(ディレクトリ)を取得する

または、もっと便利な $PSScriptRoot を使う方法:


📌 $PSScriptRoot の特徴

方法違い
$PSScriptRootPowerShell v3以降で利用可能。モジュールや関数内でも使用OK
Split-Path $MyInvocation.MyCommand.Pathv2でも利用可能。互換性が必要な場合に有効

💡 ログや設定ファイルを同じフォルダに出力する例


💡 設定ファイルの読み込み例(同階層のconfig.jsonを読む)


🚀 バッチファイルから実行する場合でも問題なし

PowerShell側で $PSScriptRoot$MyInvocation.MyCommand.Path を使っていれば、
バッチ起動であっても正しくスクリプト配置パスを取得可能です。


📌 まとめ

目的推奨コード
スクリプトの絶対パスを取得$MyInvocation.MyCommand.Path
スクリプトのフォルダを取得$PSScriptRoot または Split-Path
同階層へのファイル出力Join-Path $PSScriptRoot

PowerShellでは、パスを固定せずスクリプトの実行場所から動的に処理することが重要です。
設定ファイルの読み込み・ログ出力・ファイル操作まで柔軟に対応できるようになります。