PowerShellでファイルの存在を確認する|Test-PathとLiteralPathの使い方

  • 公開:2026.10.09
  • 更新:2026.10.09
  • Windows

エクスプローラーではファイルが見えるのに、PowerShellでは「見つからない」と言われる。あるいは、存在を調べたつもりが、同じ名前のフォルダーを拾ってしまう。スクリプトの前にパスと対象の種類を確かめると、こうした取り違えを見つけやすくなります。

Windows PowerShell 5.1やPowerShell 7では、Test-Pathでファイルやフォルダーの存在を調べられます。ここでは通常のファイルシステム上のパスを使い、ファイル名の角括弧、ファイルとフォルダーの違い、存在しないパスの読み方を見ていきましょう。


ファイルの存在を調べる

対象を保存したフォルダーでPowerShellを開き、次の例の.\sample[1].txtを実際のファイル名に置き換えてください。.\は現在の場所からの相対パスです。別のフォルダーを開いている場合は、ファイルの完全なパスをシングルクォートで囲んで指定すると、確認する場所が明確になります。

Test-Path -LiteralPath '.\sample[1].txt' -PathType Leaf

この名前のファイルがある場合、結果は次のようになります。

True

Trueは、指定した場所にファイルが見つかったことを示します。Falseなら、名前や場所が違う、ファイルがない、または指定した種類と合わない可能性があります。まずパスの綴り、拡張子、PowerShellを開いた場所を見直すと整理しやすくなります。

ファイルとフォルダーを見分ける

-PathType Leafはファイル、-PathType Containerはフォルダーを確認するときに使います。例えば、現在の場所にdataというフォルダーがある場合は、次の2つを比べられます。

Test-Path -LiteralPath '.\data' -PathType Leaf
Test-Path -LiteralPath '.\data' -PathType Container
False
True

上の結果では、dataはファイルではなくフォルダーです。-PathTypeを省略すると両方が存在確認の対象になるため、ファイルを処理する前の判定ではLeafを付けると意図が伝わりやすくなります。

角括弧を含む名前はLiteralPathで指定する

-Pathはワイルドカードを受け付けます。[1]は角括弧を含む文字列そのものではなく、文字の候補を示すパターンとして扱われるため、ファイル名がsample[1].txtだけの場合、次の2つは結果が変わります。

Test-Path -Path '.\sample[1].txt' -PathType Leaf
Test-Path -LiteralPath '.\sample[1].txt' -PathType Leaf
False
True

-LiteralPathなら角括弧もファイル名の一部として使われます。パスをシングルクォートで囲むことと、コマンド側のワイルドカード解釈は別なので、-Pathのまま引用符だけ追加してもこの違いは解消しません。特定の1ファイルを指定する場面では、-LiteralPathで書くと扱いやすくなります。

IsValidを存在確認の代わりにしない

-IsValidを付けると、存在の確認とは違う判定になります。現在の場所にmissing.txtがない場合でも、次のような結果になります。

Test-Path -LiteralPath '.\missing.txt' -PathType Leaf
Test-Path -LiteralPath '.\missing.txt' -IsValid
False
True

2行目のTrueから「ファイルがある」とは判断できません。ファイルの存在を知りたいときは、-IsValidを付けずに-LiteralPathと-PathType Leafを使う方が目的に合います。

スクリプトの分岐に使う

結果は文字列ではなく真偽値なので、ifの条件へそのまま渡せます。対象が見つかったときと、パスを見直したいときで案内を分ける例です。

$file = '.\sample[1].txt'
if (Test-Path -LiteralPath $file -PathType Leaf) {
    Write-Output 'ファイルが見つかりました'
} else {
    Write-Output 'ファイルのパスを見直してください'
}

sample[1].txtがある場合は、次のメッセージになります。

ファイルが見つかりました

この判定は内容を書き換えません。ただし、存在が確認できても、その後の読み取りに必要な権限やファイルの内容まで保証されるわけではありません。確認後に別の処理で削除・移動されることもあります。実際に読み込むコマンドでエラーが出たら、存在判定の結果だけで無視せず、エラーの内容から対処を考えてください。

ファイルが見つかった後に内容の同一性を調べたい場合は、Get-FileHashでSHA256を比較する手順へ進むと、存在確認の次の段階を確かめられます。

仕様:Microsoft Learn:Test-Path、PowerShellのワイルドカード。

このブラウザからの自分のアクセスを解析から除外できます。