フォルダ内ファイル比較

2023年12月15日 19:09

textファイルの比較は以下でできそう。しかし、fcコマンドは、画像の比較はできないらしい。 

@echo off 


rem 遅延環境変数の展開

rem 変数の中身を見るときに「%(パーセント)」ではなく「!(エクスクラメーションマーク)」で囲むと、読み込むときではなく実行するときに値に置き換える
setlocal enabledelayedexpansion


rem 比較フォルダの設定
set "folder1=before"
set "folder2=after"
set "logFile=compare_log.txt"


echo Comparing files in %folder1% and %folder2%...


rem Initialize log file
echo. > %logFile%


rem Compare files in both folders
for %%F in ("%folder1%\*") do (
    rem folder1のファイル名のみ取得
    set "file1=%%~nxF"
    set "file2=%folder2%\!file1!"
    rem folder2に、同じファイル名のものが存在するかをチェック
    if exist "!file2!" (
        fc "!folder1!\!file1!" "!file2!" > nul
        if errorlevel 1 (
            rem 不一致
            echo Files differ: !file1! >> %logFile%
        )
    ) else (
        echo File only in %folder1%: !file1! >> %logFile%
    )
)


rem Check for files only in folder2
for %%F in ("%folder2%\*") do (
    set "file2=%%~nxF"
    set "file1=%folder1%\!file2!"


    if not exist "!file1!" (
        echo File only in %folder2%: !file2! >> %logFile%
    )
)


echo Comparison completed. Check %logFile% for details.


endlocal


画像は↓でできるらしいが、コピーしたファイルでも差分としてでてしまう。
@echo off
setlocal enabledelayedexpansion

set "before=before"
set "after=after"
set "logFile=compare_log.txt"
set "ImageMagickPath=C:\Program Files\ImageMagick-7.0.11-Q16-HDRI"  REM ImageMagickのインストール先を指定

echo Comparing files in %before% and %after%...

rem Initialize log file
echo. > %logFile%

rem Compare text files in both folders
for %%F in ("%before%\*.txt") do (
    set "file1=%%~nxF"
    set "file2=!after!\!file1!"

    if exist "!file2!" (
        fc "!before!\!file1!" "!file2!" > nul
        if errorlevel 1 (
            echo Text files differ: !file1! >> %logFile%
        )
    ) else (
        echo File only in %before%: !file1! >> %logFile%
    )
)

rem Compare image files in both folders
for %%F in ("%before%\*.png") do (
    set "file1=%%~nxF"
    set "file2=!after!\!file1!"

    if exist "!file2!" (
        "%ImageMagickPath%\magick" compare -metric AE "!before!\!file1!" "!file2!" NUL 2>nul
        if !errorlevel! neq 0 (
            echo Images differ: !file1! >> %logFile%
        )
    ) else (
        echo File only in %before%: !file1! >> %logFile%
    )
)

rem Check for files only in after folder
for %%F in ("%after%\*") do (
    set "file2=%%~nxF"
    set "file1=!before!\!file2!"

    if not exist "!file1!" (
        echo File only in %after%: !file2! >> %logFile%
    )
)

echo Comparison completed. Check %logFile% for details.

endlocal