ファイル・フォルダーが存在するか確認したい
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つの確認と期待される結果
| 順番 | 対象 | PathType | 結果 | 読み方 |
|---|---|---|---|---|
| 1 | report[1].txt | Leaf | True | ファイルがある |
| 2 | report[1].txt | Container | False | 存在するがフォルダーではない |
| 3 | archive.txt(フォルダー) | Leaf | False | 名前が.txtでもファイルではない |
| 4 | archive.txt(フォルダー) | Container | True | フォルダーがある |
| 5 | missing.txt(未作成) | Any | False | ファイルもフォルダーもない |
| 6 | archive.txt(フォルダー) | Any | True | 種類を問わず存在する |
上からコマンドの実行順です。Falseは「必ず存在しない」という意味ではなく、指定した種類に合わない場合も含みます。Anyは種類を限定しません。この表は練習用配置に基づく期待値で、PowerShell実機での実行記録ではありません。
使い方を順番に確認する練習を始めるときは、この手順に沿って進めます
使い方
- 練習用の配置を用意します。業務ファイルや共有フォルダーは使いません。
- 例全体を実行します。$baseなどの変数は対象のパスを覚えるための名前です。Join-Pathはフォルダーと名前を組み合わせるだけで、ファイルは作りません。
- 6個のTrue/Falseを表の上から順に照合します。LeafとContainerの違いを確かめます。
- 自分の処理へ応用するときは、読む対象がファイルならLeaf、一覧を取得する対象ならContainerを選びます。
結果の例
-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へ分け、単に「ファイルなし」と扱わないようにします。入力用に変数を置き換える際も、空値の確認を残してください。練習用フォルダー名を変えた場合はこの例も合わせます。ファイルを読み込む処理や変更処理は含みません。
| 条件 | 表示の期待値 |
|---|---|
| 準備したreport[1].txtを指定 | ファイルを確認できました |
| missing.txtまたはarchive.txtを指定 | ファイルがないか、フォルダーが指定されています |
| Test-Pathがエラーを通知した場合 | 確認中にエラーが発生しました。パスとアクセス権を確認してください |
権限に関する注意:アクセス拒否の原因を調べずに、管理者権限や sudo で実行しないでください。
うまくいかないときに確認するエラーや想定と違う結果が出たときの確認ポイント
うまくいかないとき
結果が想定と違う場合は$pathや$fileを表示して、実際の保存場所・名前・拡張子を確認します。アクセス拒否やネットワーク障害などは、存在しないことと同一視しません。管理者実行や権限変更で無理に回避せず、自分が確認してよい場所か見直してください。この例はローカルのファイル/フォルダー用で、レジストリ値やURLの検査には流用しません。
Windows PowerShell 5.1/Windows上のPowerShell 7を中心とした例です。対応環境や文字コードの違いは各ページで確認してください。