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」となっています。