PowerShellを使ってスクリプトを書くとき、「指定したパスが実際にどのファイルやフォルダに対応するのか?」と確認したくなることがあります。そんなときに便利なのがResolve-Path
コマンドです。このコマンドを使えば、相対パスやワイルドカードを含む曖昧な指定でも、正確な絶対パスを簡単に取得できます。本記事では、Resolve-Path
の基本的な使い方から応用例までを、初心者にもわかりやすく解説していきます。
Resolve-Path
は、指定したファイルやディレクトリのパスを「解決」して、正確な絶対パスを返してくれるPowerShellの標準コマンドレットです。たとえば、相対パスで記述した場合やワイルドカード(*
や?
)を使った指定でも、それが実際にどのファイルやフォルダに該当するのかを明確にしてくれます。
これは、スクリプトの中で特定のファイルを操作する前に存在を確認したり、確実に目的のファイルを処理したりする際にとても有用です。
まずは基本的な使い方を見てみましょう。
Resolve-Path .\Documents
このコマンドは、現在のディレクトリから見たDocuments
というフォルダの絶対パスを返してくれます。実行結果の例は以下の通りです。
Path
----
C:\Users\username\Documents
このように、相対パスを完全な絶対パスに変換してくれるため、スクリプトの中でパスを正確に扱いたい場合に非常に便利です。
Resolve-Path
はワイルドカードと組み合わせることで、条件に一致する複数のパスを一度に取得できます。
Resolve-Path C:\Users\*\Documents
この例では、C:\Users
以下のすべてのユーザーアカウントにあるDocuments
フォルダのパスを解決します。ユーザーが複数いる場合、それぞれのパスがリストで返されます。
存在しないパスを指定すると、Resolve-Path
はエラーを返します。
Resolve-Path .\NotExistFolder
Resolve-Path : パス 'C:\Users\username\NotExistFolder' は存在しません。
このように、存在しないパスを解決しようとすると、警告が出て処理が中断されるため、エラーハンドリングが必要な場面では注意が必要です。
Resolve-Path
は、オブジェクトとして結果を返します。このオブジェクトには、Path
プロパティとProviderPath
プロパティが含まれます。
$resolved = Resolve-Path .\Documents
$resolved.Path
$resolved.ProviderPath
Path
は PowerShellの仮想パス(PSDriveを含む形式)ProviderPath
は実際のWindowsファイルシステムのパスたとえば、PowerShellではレジストリや環境変数もパスとして扱えるため、これらの違いを理解しておくとより高度な使い方ができます。
PowerShellには「プロバイダー」という仕組みがあり、ファイルシステムだけでなく、レジストリや環境変数といったさまざまなリソースをパスとして扱うことができます。
たとえば、環境変数をResolve-Pathで解決するには以下のようにします。
Resolve-Path env:Path
結果は以下のようになります。
Path
----
Env:\Path
このように、env:
プロバイダーを使えば環境変数のパスも扱えます。レジストリの場合はHKLM:
やHKCU:
などが使えます。
たとえば、指定されたファイルの存在確認をしたい場合に、Resolve-Path
とTry/Catch
を組み合わせることで、柔軟なエラーハンドリングが可能です。
try {
$path = Resolve-Path .\sample.txt
Write-Output "ファイルのパス: $($path.ProviderPath)"
} catch {
Write-Warning "指定されたファイルは存在しません。"
}
このようにすれば、スクリプトの中でパスの存在を確認してから処理を進めることができ、エラーの原因を減らすことができます。
たとえば、現在のフォルダに「log2023」「log2024」「log2025」といった複数のフォルダがある場合に、次のようにワイルドカードを使って解決できます。
Resolve-Path .\log*
これにより、対象のフォルダすべての絶対パスを一括で取得できます。スクリプトの中でループ処理に使いたい場合などにも非常に便利です。
Resolve-Path
と似たような機能を持つコマンドとしてTest-Path
やGet-Item
があります。それぞれの違いは以下の通りです。
Test-Path
:パスが存在するかどうかを確認する(ブール値で返す)Get-Item
:指定したパスのオブジェクトそのものを取得Resolve-Path
:パスを絶対パスに変換して返す使い分けることで、より強力で安全なスクリプトを作成できます。
Resolve-Path
は、PowerShellスクリプトを書くうえで非常に役立つパス解決のツールです。相対パスやワイルドカードを正確な絶対パスに変換できることで、スクリプトの安定性や保守性が向上します。
ポイントをまとめると以下の通りです。
これからPowerShellでの自動化や管理スクリプトを学んでいきたい方は、ぜひResolve-Path
の使い方をマスターしてみてください。パスに関するトラブルを減らし、よりスマートなコマンド操作ができるようになるでしょう。