👻

PowerShellで指定したファイルの中身が存在するかチェックするFunction

2024/07/09に公開

概要

ファイルそのものが存在するかについては、標準コマンドレット、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」でファイル中身の有無をチェック可能

関連記事

https://haretokidoki-blog.com/pasocon_powershell-startup/
https://zenn.dev/haretokidoki/articles/7e6924ff0cc960
https://zenn.dev/haretokidoki/articles/fb6830f9155de5

GitHubで編集を提案

Discussion