👻
PowerShellで指定したファイルの中身が存在するかチェックするFunction
概要
ファイルそのものが存在するかについては、標準コマンドレット、Test-Path
により判定できますが、
ファイルの中身(内容)を確認するコマンドレットはありません。
おそらく検索すれば数多く他の記事がありそうな内容だった為、これまで記事を作成していませんでしたが、
別の記事でこのFunctionを使う用途が発生しました。
どうせなら、自身が決めた命名規則や処理内容でFunctionを自作しようと思い、この記事を投稿します。
この記事のターゲット
- PowerShellユーザーの方
- 処理前にファイルの中身が存在するかチェックしたい方
自作したFunction
このFunctionを実行する前提条件は、「対象ファイルそのものは存在すること」となります。
(ファイル自体の存在チェックは、Test-Path
で実現可能。)
Test-FileHasContent
function Test-FileHasContent {
param (
[System.String]$Path
)
try {
$fileContents = (Get-Content $Path)
}
catch {
Write-Error 'ファイル内容を読み込む際にエラーが発生しました。'
return $false
}
# Null または 空文字、空白のみだった場合はコンテンツなしの判定
return (-not ([System.String]::IsNullOrWhiteSpace($fileContents)))
}
この Test-FileHasContent
を実行すると、引数のファイルの中身を確認し、
C#のメソッド、IsNullOrWhiteSpace
では、Null または 空文字、空白のみで構成された内容だった場合、
BoolのTrueを返されます。
このメソッドを使用した結果を戻り値として設定しています。
自作Functionの検証
検証方法
テスト用に データがあるテキストファイル と データのないテキストファイル 、
2種類のファイルを準備して自作したFunctionが正常動作するかテストしました。
中身が存在しないファイルを対象にFunctionを実行
中身のないテキストファイル「WithNoContent.txt」
(※ 中身がない状態)
検証したコード(コンテンツなしパターン)
# 中身がないテキストファイルを設定
$targetFile = 'D:\Downloads\WithNoContent.txt'
if (Test-FileHasContent $targetFile) {
Write-Host 'ファイルの中身が存在する'
}
else {
Write-Host 'ファイルの中身が存在しない'
}
実際の実行結果
PS C:\Users\"ユーザー名"> $targetFile = 'D:\Downloads\WithNoContent.txt'
>> if (Test-FileHasContent $targetFile) {
>> Write-Host 'ファイルの中身が存在する'
>> }
>> else {
>> Write-Host 'ファイルの中身が存在しない'
>> }
ファイルの中身が存在しない
PS C:\Users\"ユーザー名">
上記の結果のとおり、中身のないテキストファイルで自作Functionを実行すると、
期待通り False判定 となりました。
中身が存在するファイルを対象にFunctionを実行
中身のあるテキストファイル「WithContents.txt」
aaa
検証したコード(コンテンツありパターン)
# 中身があるテキストファイルを設定
$targetFile = 'D:\Downloads\WithContents.txt'
if (Test-FileHasContent $targetFile) {
Write-Host 'ファイルの中身が存在する'
}
else {
Write-Host 'ファイルの中身が存在しない'
}
実際の実行結果
PS C:\Users\"ユーザー名"> $targetFile = 'D:\Downloads\WithContents.txt'
>> if (Test-FileHasContent $targetFile) {
>> Write-Host 'ファイルの中身が存在する'
>> }
>> else {
>> Write-Host 'ファイルの中身が存在しない'
>> }
ファイルの中身が存在する
PS C:\Users\"ユーザー名">
上記の結果のとおり、中身のあるテキストファイルで期待通り動作することを確認。
まとめ
- ファイル自体の存在チェックは標準コマンドレットの「
Test-Path
」で対応 - 自作したFunction「
Test-FileHasContent
」でファイル中身の有無をチェック可能
関連記事
Discussion