PowerShellでパスを結合する|Join-Pathと存在確認の使い分け

  • 公開:2026.10.16
  • 更新:2026.10.16
  • Windows

保存先フォルダーとファイル名を変数で管理していると、文字列を足すたびに区切りのバックスラッシュを付けるか迷うことがあります。余分な区切りや付け忘れを避けたいときは、PowerShellのJoin-Pathでパスを組み立てられます。

ここではWindows上のファイルシステムを使い、Windows PowerShell 5.1とPowerShell 7の両方で使える例を紹介します。パスを作ることと、実際のファイルを作ることを分けて考えると、保存前の確認も進めやすくなります。

フォルダーとファイル名を結合する

$base = 'reports'
$file = Join-Path -Path $base -ChildPath 'daily.txt'
$file
reports\daily.txt

-Pathが基点、-ChildPathが後ろに付ける名前です。変数に入れた結果は、その後ファイルを保存するときのパスとして使えます。このコマンドだけでフォルダーやファイルが新規作成されることはありません。

区切り文字の重複を処理する

Join-Path -Path 'reports\' -ChildPath '\daily.txt'

この例もreports\daily.txtになります。基点の末尾と子の先頭にバックスラッシュがある場合でも、結合する部分の区切りは一つになります。単純な文字列の足し算より、パスを結合する意図が読み取りやすい書き方です。

複数の階層を順に結合する

$year = Join-Path -Path 'reports' -ChildPath '2026'
Join-Path -Path $year -ChildPath 'daily.txt'
reports\2026\daily.txt

Windows PowerShell 5.1と7の両方で同じスクリプトを使うなら、このように段階的に結合できます。-AdditionalChildPathはPowerShell 6以降の引数で、5.1では使えません。また7.6では-ChildPathに配列を渡す機能も追加されています。手元の版を問わず使いたいコードには、まず上の形が分かりやすい選択です。

パスの存在を別に確認する

新しい空の作業フォルダーで次を実行すると、まだ存在しないパスでも文字列として結合できることが分かります。

Join-Path -Path 'reports' -ChildPath 'daily.txt'
Test-Path -LiteralPath 'reports'
reports\daily.txt
False

Falseは、この例の作業フォルダーにreportsがない場合の結果です。すでにあれば結果は変わります。存在確認にはTest-Pathを使い、必要に応じて保存先を用意する流れになります。

存在するパスとして解決する

try {
    Join-Path -Path 'reports' -ChildPath 'daily.txt' -Resolve -ErrorAction Stop
} catch {
    'Path could not be resolved'
}

-Resolveは、結合したパスを実際のプロバイダー上で解決します。上のパスがない状態なら、この例ではPath could not be resolvedが表示されます。単に将来の保存先名を組み立てたいときには、-Resolveを付けない形が適しています。

絶対パスでドライブを指定するときは、そのドライブが利用できることも前提になります。また、ファイルシステム用のパスを組み立てる書き方を、WebのURL結合にそのまま流用しないようにしてください。ファイルの存在や種類まで調べたい場合は、Test-Pathの使い方へ進めます。

参考資料