PowerShell: ファイルやフォルダの存在をチェック Test-Path

PowerShellでファイルやフォルダの存在を確認する場合、 Test-Pathコマンドレットを使用します。

Test-Pathの引数にチェックしたいファイルやフォルダのパスを指定すると、 存在する場合はTrue、存在しない場合はFalseが戻ります。 「ファイルの読み込みを行う前に、 存在をチェックしてから読み込みを行う」 といった操作に利用されます。

ファイルの存在をチェック

次のサンプルコードでは、 ファイルtest.txtは存在し、test2.txtは存在しません。

# 存在する
Test-Path  "D:\test\powershell\test.txt"

# 存在しない
Test-Path  "D:\test\powershell\test2.txt"

# 実行結果
True
False

次のコードはif文の条件分岐を使って、 ファイルが存在する場合と存在しない場合で 処理を分岐させています。 よく使われるロジックです。

$file_path = "D:\test\powershell\test.txt"

if (Test-Path $file_path){
	# 存在する場合の処理
} else {
	# 存在しない場合の処理
}

ファイルが存在しない場合だけロジックを記述したい場合は 否定演算子(-not 又は -!)を使って次のように記述します。

if ( -not (Test-Path $file_path)){
	# 存在しない場合の処理
}

フォルダの存在をチェックする

先程のファイルチェックと同じようにフォルダの存在もチェックできます。 引数にフォルダのパスを指定するだけです。

次のコードではフォルダpowershellは存在し、 powershell2は存在しません。

# 存在する
Test-Path  "D:\test\powershellt"

# 存在しない
Test-Path  "D:\test\powershell2"

# 実行結果
True
False

次のコードはフォルダの存在を確認し、 存在しなければフォルダを新規作成します。 これもよく使われるロジックです。

$folder_path = "D:\test\powershell2"

if (-not (Test-Path $folder_path)){
	# 新規作成
	New-Item -ItemType Directory -Path $folder_path
}

他のパラメータを指定する

Test-Pathコマンドレットには 他にもパラメータがあるのでいくつか紹介します。

「-PathType」パラメータではパスの種類を指定できます。 Containerを指定するとフォルダ、 Leafを指定するとファイルになります。

# フォルダ
Test-Path パス -PathType Container

# ファイル
Test-Path パス -PathType Leaf

「-OlderThan」パラメータはパスの最終更新日が指定日時よりも 古ければTrue、そうでなければFalseを返します。

Test-Path パス -OlderThan "2022/1/1"

「-NewerThan」パラメータはパスの最終更新日が指定日時よりも 新しければTrue、そうでなければFalseを返します。

Test-Path パス -NewerThan "2022/1/1"

Test-Pathは単純にファイルやフォルダの存在チェックだけでなく、 ここで紹介した他のパラメータと組み合わせてチェックすることもできます。

PowerShell