2つのファイルが本当に同じ内容か確認する

Daily Code

「Daily Code」では、毎日の事務作業を少し楽にする小さな方法を紹介します。

この記事の対象と前提

  • 対象:PC初心者、事務職、オフィスワーカー

  • 目的:ファイル・フォルダ、安全確認、設定・状態確認

  • 環境:Windows、PowerShell

  • 方法:コピペ、試して理解

  • タグ:ファイル、比較、SHA-256、PowerShell、Windows

  • 難しさ:はじめて

  • 所要時間:約10分

こんなときに役立つ

たとえば、こんな経験はありませんか?

  • 「最終版.xlsx」と「最終版_本当の最終.xlsx」がある

  • 同じ名前のZIPファイルを2回ダウンロードした

  • USBメモリへコピーしたファイルが元と同じか心配

  • 誰かから「このファイルと同じ?」と聞かれた

  • 配布サイトに「SHA-256」という長い文字列が書いてあるが意味が分からない

Windowsのエクスプローラーでは、

  • ファイル名

  • ファイルサイズ

  • 更新日時

などは確認できます。

ただし、それだけでは中身が完全に同じかまでは分かりません。

そこで使うのが「ファイルの指紋」です。


何が便利になるか

同じ名前・同じサイズのファイルでも本当に中身が同じか、Windows標準のPowerShellで確認する。 画面で一件ずつ確認する作業を、再現しやすい手順にできます。

GUIでできる方法

PowerShellを使う前に、Windowsのエクスプローラーでも確認してみましょう。

  1. 比べたいファイルを右クリック

  2. プロパティを開く

  3. 「サイズ」と「更新日時」を見る

サイズが違えば、ファイルの中身も違う可能性が高いです。

ただし、

サイズが同じ = 中身も同じ

とは限りません。

ここからPowerShellの出番です。


GUIでは大変になる場面

件数が増えたり、同じ確認を繰り返したりすると、目視だけでは見落としや操作のばらつきが起きやすくなります。

コピペで試す

Get-FileSha256.ps1

#requires -Version 5.1

<#
.SYNOPSIS
    ファイルの「指紋(SHA-256)」を確認します。

.DESCRIPTION
    指定したファイルの内容からSHA-256という値を計算します。

    難しく考えなくて大丈夫です。
    同じ内容のファイルなら、基本的に同じ値になります。

    このスクリプトはファイルを読み取るだけです。
    ファイルの内容を書き換えたり、削除したりはしません。

.EXAMPLE
    .\Get-FileSha256.ps1 -Path "C:\Temp\sample.txt"
#>

param(

    # 確認したいファイルの場所を指定します。


    # 例: C:\Temp\sample.txt

    [Parameter(Mandatory = $true)]
    [string]$Path
)

# ------------------------------------------------------------


# 1. ファイルが本当にあるか確認


# ------------------------------------------------------------


# 入力ミスのまま処理を続けると分かりにくいので、


# 最初に「その場所に何かあるか」を確認します。

if (-not (Test-Path -LiteralPath $Path)) {
    Write-Host ""
    Write-Host "ファイルが見つかりません。" -ForegroundColor Yellow
    Write-Host "指定した場所: $Path"
    Write-Host ""
    Write-Host "ファイルの場所と名前をもう一度確認してください。"
    exit 1
}

# ------------------------------------------------------------


# 2. Windowsが認識している正式なファイルの場所を取得


# ------------------------------------------------------------

$resolvedPath = (Resolve-Path -LiteralPath $Path).Path

# ------------------------------------------------------------


# 3. 間違ってフォルダを指定していないか確認


# ------------------------------------------------------------

$item = Get-Item -LiteralPath $resolvedPath

if ($item.PSIsContainer) {
    Write-Host ""
    Write-Host "フォルダではなく、確認したいファイルを指定してください。" -ForegroundColor Yellow
    Write-Host "指定した場所: $resolvedPath"
    exit 1
}

# ------------------------------------------------------------


# 4. ファイルの「指紋」を計算


# ------------------------------------------------------------


# Get-FileHash はPowerShellに標準で用意されている機能です。


# ファイルを書き換える処理ではありません。

$hashResult = Get-FileHash -LiteralPath $resolvedPath -Algorithm SHA256

# ------------------------------------------------------------


# 5. 結果を見やすく表示


# ------------------------------------------------------------

Write-Host ""
Write-Host "=== ファイル確認結果 ==="
Write-Host ""
Write-Host "ファイル : $resolvedPath"
Write-Host "方式     : $($hashResult.Algorithm)"
Write-Host "指紋     : $($hashResult.Hash)"
Write-Host ""
Write-Host "別のファイルも確認し、「指紋」が同じか比べてみてください。"

実行結果

対象:PC初心者・事務職 / 所要時間:約5〜10分 / 難しさ:🟢 はじめて

「同じ名前のファイルが2つあるけれど、本当に同じもの?」

「ダウンロードしたファイルが、配布元のファイルと同じか確認したい」

そんなときに使える小さな便利ワザです。

今回は、Windowsに最初から入っている PowerShell を使います。

プログラミングの知識は不要です。まずは1行コピーして試します。


ここに示した表示例と予想はサンプルREADME由来です。このUbuntu上ではWindows PowerShellによる実行確認はしていません。

自分で試すテスト

ここが今回のサンプルで一番大事なところです。

うまくいかないとき

応用

この考え方を使うと、次のようなサンプルへ発展できます。

  • フォルダの中に同じファイルがないか探す

  • コピー前とコピー後が同じか一括確認する

  • ファイル一覧をExcelへ出す

  • 更新されたファイルだけ一覧にする

  • PowerShellをダブルクリック感覚で使えるようにする


自動化への発展

1件で手順を確認した後は、複数ファイルの一括確認やCSVへの記録、定期実行へ発展できます。業務データでは、まずコピーで試してください。

仕組みを知りたい人向け

Get-FileHash はPowerShell標準のコマンドです。

今回のスクリプトでは、さらに

  • ファイルが本当に存在するか

  • フォルダを間違って指定していないか

  • 絶対パスはどこか

を確認してからHashを計算しています。

このあたりは「まず使ってみたい」段階では読み飛ばして構いません。


GitHubリンク

README、sample.json、最新のソースコードは Daily-Code-Samples #001 で確認できます。

まとめ

まずGUIで確認できることを押さえ、必要なときだけコピーできる手順を使うのが安全です。結果は自分の環境で確認し、未検証の表示例を事実として扱わないようにしてください。

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました