@echo off
setlocal
set FILE1=%~dp0A_01.txt
set FILE2=%~dp0A_02.txt
set OUTPUT=%~dp0A_result.txt
echo [比較レポート] > "%OUTPUT%"
echo 実行日: %date% %time% >> "%OUTPUT%"
echo ---------------------------------------- >> "%OUTPUT%"
:: fcコマンドで比較して、エラーレベルで判定
fc /n "%FILE1%" "%FILE2%" > nul
if %errorlevel% equ 0 (
echo 結果: 差異はありません。2つのファイルは同一です。 >> "%OUTPUT%"
) else (
echo 結果: 相違点が検出されました。 >> "%OUTPUT%"
echo. >> "%OUTPUT%"
echo [相違点一覧] >> "%OUTPUT%"
:: fcの結果をそのまま表示(差異のみ)
fc /n "%FILE1%" "%FILE2%" >> "%OUTPUT%"
)
echo ---------------------------------------- >> "%OUTPUT%"
echo レポート終了 >> "%OUTPUT%"
echo 比較が完了しました。
echo 結果は %OUTPUT% を確認してください。
pause
endlocal
対象ファイル:
A_01.txtA_02.txt- 出力先:
A_result.txt
処理の流れ
- バッチ自身が置かれているフォルダを基準に、比較対象のファイル名を決める
fc /nコマンドで2ファイルを比較する/nは差異の行番号を表示する指定
- 比較結果の終了コードを確認する
0:完全一致0以外:相違あり、またはファイル読み込みエラー
A_result.txtに以下を書き込む- 比較レポートのタイトル
- 実行日時
- 一致・相違の判定
- 相違がある場合は
fcの比較結果
- 画面に完了メッセージを表示し、
pauseでキー入力待ちになる
注意点
A_result.txtは毎回>で作り直されるため、前回の結果は上書きされる- ファイルが存在しない場合も「相違点が検出されました」と表示される可能性がある
fcのエラー内容もレポートに出力される- バッチファイルがCP932(Shift-JIS)形式で保存されている場合、文字化けを避けるには、Windows環境ではそのまま使うか、文字コードを統一したほうがいい
- 比較は基本的に行単位で、空白や改行の違いも差異として扱われる
差異結果例
[比較レポート]
実行日: 2026/07/30 23:15:48.74
----------------------------------------
結果: 相違点が検出されました。
[相違点一覧]
ファイル C:\USERS\XXXXXX\ONEDRIVE\WORKSPACE\A_01.txt と C:\USERS\XXXXXX\ONEDRIVE\WORKSPACE\A_02.TXT を比較しています
***** C:\USERS\XXXXXX\ONEDRIVE\WORKSPACE\A_01.txt
1: Line 1: Item A
2: Line 2: Item B
3: Line 3: Item C
***** C:\USERS\XXXXXX\ONEDRIVE\WORKSPACE\A_02.TXT
1: Line 1: Item A
2: Line 2: Item Z
3: Line 3: Item C
*****
***** C:\USERS\XXXXXX\ONEDRIVE\WORKSPACE\A_01.txt
4: Line 4: Item D
5: Line 5: Item E
6: Line 6: Item F
***** C:\USERS\XXXXXX\ONEDRIVE\WORKSPACE\A_02.TXT
4: Line 4: Item D
5: Line 5: Item W
6: Line 6: Item F
*****
----------------------------------------
レポート終了
【参考】fcコマンドの仕様
Windows標準の fc (File Compare) コマンドは、デフォルトで相違箇所の前後(通常は1〜2行程度)をコンテキストとして表示する仕様になっています。 fc は以下のような挙動をします:
- 一致する部分は省略: 前後の合致している行は、比較対象の塊として認識され、相違点の前後に補足情報として表示されます。
- 完全な一致: 全く同じ行が連続して続く場合、それらは省略されずそのまま表示されますが、相違箇所が見つかるとそのブロック全体を表示します。
