確認のみ場所と一覧

ファイル・フォルダーが存在するか確認したい

このページでできること

Test-Pathで、指定した場所にファイルやフォルダーがあるか調べます。Leafはファイル、Containerはフォルダーを確認し、True(条件に合う)またはFalse(合わない)を返します。ここではWindowsのファイルシステムを対象にします。

コマンドの例

# 下の「練習用の配置」を用意してから実行します
$base = Join-Path $HOME 'TestPathPractice'
$file = Join-Path $base 'report[1].txt'
$folder = Join-Path $base 'archive.txt'
$missing = Join-Path $base 'missing.txt'

Test-Path -LiteralPath $file -PathType Leaf -ErrorAction Stop
Test-Path -LiteralPath $file -PathType Container -ErrorAction Stop
Test-Path -LiteralPath $folder -PathType Leaf -ErrorAction Stop
Test-Path -LiteralPath $folder -PathType Container -ErrorAction Stop
Test-Path -LiteralPath $missing -PathType Any -ErrorAction Stop
Test-Path -LiteralPath $folder -PathType Any -ErrorAction Stop

練習用の配置(先に手動で用意)

自分のホームフォルダー($HOME)
└─ TestPathPractice/
   ├─ report[1].txt   ← 空のテキストファイル
   └─ archive.txt/    ← 名前に .txt があるフォルダー
missing.txt は作成しません

PowerShellで $HOME を表示して場所を確認し、エクスプローラーで未使用の練習用フォルダーTestPathPracticeを作ります。その中に上記2項目を作ってください。同名の場所が既にある場合は使わず、新しい名前を選び、コードのTestPathPracticeも同じ名前へ変更します。拡張子を表示してreport[1].txt.txtになっていないか確認します。掲載コード自体は作成・移動・削除を行いません。

6つの確認と期待される結果

6つの確認と期待される結果
順番対象PathType結果読み方
1report[1].txtLeafTrueファイルがある
2report[1].txtContainerFalse存在するがフォルダーではない
3archive.txt(フォルダー)LeafFalse名前が.txtでもファイルではない
4archive.txt(フォルダー)ContainerTrueフォルダーがある
5missing.txt(未作成)AnyFalseファイルもフォルダーもない
6archive.txt(フォルダー)AnyTrue種類を問わず存在する

上からコマンドの実行順です。Falseは「必ず存在しない」という意味ではなく、指定した種類に合わない場合も含みます。Anyは種類を限定しません。この表は練習用配置に基づく期待値で、PowerShell実機での実行記録ではありません。

使い方を順番に確認する練習を始めるときは、この手順に沿って進めます

使い方

  1. 練習用の配置を用意します。業務ファイルや共有フォルダーは使いません。
  2. 例全体を実行します。$baseなどの変数は対象のパスを覚えるための名前です。Join-Pathはフォルダーと名前を組み合わせるだけで、ファイルは作りません。
  3. 6個のTrue/Falseを表の上から順に照合します。LeafとContainerの違いを確かめます。
  4. 自分の処理へ応用するときは、読む対象がファイルならLeaf、一覧を取得する対象ならContainerを選びます。

結果の例

True False False True False True
注意点

-LiteralPathは角括弧などをワイルドカードとして扱わず、指定した名前そのものを確認します。存在確認がTrueでも、その後の読み書き権限やロック、内容の正しさは保証しません。確認後に対象が変更される場合もあるため、実際の読み書きにもエラー処理が必要です。Windows PowerShell 5.1/PowerShell 7向けの基本構文ですが、空文字や空白の扱いには版による違いがあるため、入力値を先に確認します。-IsValidはパス構文の検査用で、存在確認の代わりには使いません。

存在確認の後で分岐する

ファイルがある場合だけ次へ進む(メッセージ表示のみ)

$path = Join-Path (Join-Path $HOME 'TestPathPractice') 'report[1].txt'
try {
    if ([string]::IsNullOrWhiteSpace($path)) {
        throw 'パスが空です'
    }
    if (Test-Path -LiteralPath $path -PathType Leaf -ErrorAction Stop) {
        'ファイルを確認できました'
    } else {
        'ファイルがないか、フォルダーが指定されています'
    }
} catch {
    '確認中にエラーが発生しました。パスとアクセス権を確認してください'
}

ifはTrueなら最初のメッセージ、Falseならelse側を表示します。-ErrorAction Stopで通知されたエラーをcatchへ分け、単に「ファイルなし」と扱わないようにします。入力用に変数を置き換える際も、空値の確認を残してください。練習用フォルダー名を変えた場合はこの例も合わせます。ファイルを読み込む処理や変更処理は含みません。

ファイルがある場合だけ次へ進む(メッセージ表示のみ):3行
条件表示の期待値
準備したreport[1].txtを指定ファイルを確認できました
missing.txtまたはarchive.txtを指定ファイルがないか、フォルダーが指定されています
Test-Pathがエラーを通知した場合確認中にエラーが発生しました。パスとアクセス権を確認してください

権限に関する注意:アクセス拒否の原因を調べずに、管理者権限や sudo で実行しないでください。

うまくいかないときに確認するエラーや想定と違う結果が出たときの確認ポイント

うまくいかないとき

結果が想定と違う場合は$pathや$fileを表示して、実際の保存場所・名前・拡張子を確認します。アクセス拒否やネットワーク障害などは、存在しないことと同一視しません。管理者実行や権限変更で無理に回避せず、自分が確認してよい場所か見直してください。この例はローカルのファイル/フォルダー用で、レジストリ値やURLの検査には流用しません。

Windows PowerShell 5.1/Windows上のPowerShell 7を中心とした例です。対応環境や文字コードの違いは各ページで確認してください。

公式ドキュメントで詳しく確認する

Microsoft:ErrorActionとエラーへの対応

Microsoft:Join-Pathでパスを組み合わせる

同じカテゴリの項目

一覧に戻る