PowerShell: 相対パス⇔相対パスの相互変換

PowerShellで相対パスを絶対パスに変換するには Convert-Pathコマンドレットを使い、 逆に絶対パスを相対パスに変換するには Relolve-Pathコマンドレットを使います。 それぞれについて説明します。

相対パスから絶対パスに変換

Convert-Pathで相対パスから絶対パスに変換します。 Convert-Pathの後に相対パスを指定するだけです。

書式
Convert-Path 相対パス

存在しないパスを指定した場合はエラーが発生します。

次のコードはカレントディレクトリと、 その親ディレクトリを相対パスで指定した結果です。

# カレントディレクトリ
Convert-Path .

# 親ディレクトリ
Convert-Path ..

# 実行結果
D:\test\powershell
D:\test

このように結果を絶対パスで取得できます。

さらに、ワイルドカード(*)を使って複数の絶対パスを求めることも できます。
次のコードはカレントディレクトリ内にある拡張子が「.ps1」の ファイルの絶対パスを取得しています。

Convert-Path *.ps1

# 実行結果
D:\test\powershell\test1.ps1
D:\test\powershell\test2.ps1

絶対パスから相対パスに変換

Resolve-Pathで絶対パスから相対パスに変換します。 絶対パスの後に-Relativeオプションを付けることで相対パスが取得できます。

書式
Relative-Path 絶対パス -Relative

存在しないパスを指定した場合はエラーが発生します。

カレントディレクトリが「D:\test\powershell」だとして、 Resolve-Pathを使っていくつかの絶対パスからの相対パスを 取得してみます。 ディレクトリの階層は次の通りです。

D:
└ test
  └ powershell(カレントディレクトリ)
    └ f1
# カレントディレクトリ
Resolve-Path D:\test\powershell -Relative

# 親ディレクトリ
Resolve-Path D:\test -Relative

# 1つ下のディレクトリ
Resolve-Path D:\test\powershell\f1 -Relative

# 実行結果
..\powershell
..\..\test
.\f1

親ディレクトリの「D:\test」を指定した場合、 人の感覚的には「..\」で済むのですが、 最後を「test」で終わらせるためにもう一段上に上がって 「..\..\test」となっています。

PowerShell