Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @ECHO OFF
- REM v2.01a 27_May_2022
- REM CHANGELOG: revised "nonone" (error) variable to "none"
- REM added end time to log
- REM added log file sizes to estimate time
- REM To be used with HASHDEEP files
- SET "batchpath=%~dp0"
- CD /D "%batchpath%"
- ECHO %batchpath%
- REM >>> CHANGE PARAMETERS FOR COMPARING TWO HASHLOGS FROM HASHDEEP <<<
- REM *** ENTER TWO HASHLOGS TO COMPARE ***
- SET "file1=file1.log"
- SET "file2=file2.log"
- REM >>> END USER INPUT <<<
- IF NOT EXIST "excludecompare.txt" (
- echo ##
- echo %%%%%%%%
- echo @ea
- )>"excludecompare.txt"
- ECHO Cleaning up temp log files
- del ##_*.txt 2>NUL
- REM Generate Time Stamp
- SET "STAMPDATE=%DATE:/=%"
- SET "STAMPTIME=%TIME::=%"
- SET "TIMESTAMP=%STAMPDATE: =_%_%STAMPTIME:.=_%"
- SET "TIMESTAMP=%TIMESTAMP: =0%"
- SET "TIMESTAMP=%TIMESTAMP:~4,-3%"
- ECHO START: %DATE% %TIME% > "##_datetime.txt"
- ECHO( >>"##_datetime.txt"
- ECHO Comparing %file1% to %file2% >> "##_datetime.txt"
- ECHO( >>"##_datetime.txt"
- FOR %%I in ("%file1%") DO SET "fname1=%%~nI"
- FOR %%I in ("%file2%") DO SET "fname2=%%~nI"
- SET "fname1=%fname1: =_%"
- SET "fname2=%fname2: =_%"
- findstr /G:"excludecompare.txt" /V "%file1%" > "##_FILE1_clean.txt"
- findstr /G:"excludecompare.txt" /V "%file2%" > "##_FILE2_clean.txt"
- CLS
- ECHO START: %DATE% %TIME%
- ECHO(
- FOR /F %%a in ('Find "" /v /c ^< "##_FILE1_clean.txt"') DO (SET "line1=%%a")
- ECHO Number of files to process in %file1%: %line1%
- FOR /F %%a in ('Find "" /v /c ^< "##_FILE2_clean.txt"') DO (SET "line2=%%a")
- ECHO Number of files to process in %file2%: %line2%
- ECHO %file1%: %line1% hashes >> "##_datetime.txt"
- ECHO %file2%: %line2% hashes >> "##_datetime.txt"
- ECHO( >> "##_datetime.txt"
- ECHO ---------------------------------------------------------------- >> "##_datetime.txt"
- ECHO( >> "##_datetime.txt"
- if %line1% GEQ %line2% (
- SET /A "fline=%line1%"
- SET "fname=%file1%"
- )
- if %line2% GEQ %line1% (
- SET /A "fline=%line2%"
- SET "fname=%file2%"
- )
- SET /A "fsizetime = fline / 1000"
- IF %fsizetime% EQU 0 SET "fsizetime = less than 1 minute"
- (FOR /F "usebackq tokens=2 delims=," %%a in ("##_FILE1_clean.txt") do ECHO %%a)>"##_hash1.txt"
- (FOR /F "usebackq tokens=2 delims=," %%a in ("##_FILE2_clean.txt") do ECHO %%a)>"##_hash2.txt"
- ECHO(
- ECHO ----------------------------------------------------------------
- ECHO(
- ECHO Extracting NON-MATCHING Hashes:
- findstr /G:"##_hash1.txt" /V /I /L "##_FILE2_clean.txt" > "##_HASH_IN_FILE2_NOT_IN_FILE1.txt"
- findstr /G:"##_hash2.txt" /V /I /L "##_FILE1_clean.txt" > "##_HASH_IN_FILE1_NOT_IN_FILE2.txt"
- ECHO(
- ECHO NON-MATCHING HASHES with same path and filename (i.e. possibly corrupt or changed): > "##_SAME_FILENAME_NONMATCHING_HASH_FILE1_FILE2.txt"
- SET "none="
- (FOR /F "usebackq tokens=1-3 delims=," %%a in ("##_HASH_IN_FILE1_NOT_IN_FILE2.txt") DO (
- FOR /F "usebackq tokens=1-3 delims=," %%q in ("##_HASH_IN_FILE2_NOT_IN_FILE1.txt") DO (
- IF "%%c" EQU "%%s" (
- ECHO %file1%: %%b %%c %%a
- ECHO %file2%: %%r %%s %%q
- SET none=1
- ECHO(
- )
- )
- )) >> "##_SAME_FILENAME_NONMATCHING_HASH_FILE1_FILE2.txt"
- IF NOT DEFINED none ECHO ALL CLEAR >>"##_SAME_FILENAME_NONMATCHING_HASH_FILE1_FILE2.txt"
- ECHO(>> "##_SAME_FILENAME_NONMATCHING_HASH_FILE1_FILE2.txt"
- TYPE "##_SAME_FILENAME_NONMATCHING_HASH_FILE1_FILE2.txt"
- ECHO ----------------------------------------------------------------
- ECHO(
- ECHO ---------------------------------------------------------------- >> "##_SAME_FILENAME_NONMATCHING_HASH_FILE1_FILE2.txt"
- ECHO( >> "##_SAME_FILENAME_NONMATCHING_HASH_FILE1_FILE2.txt"
- SET "none="
- ECHO Extracting MATCHING Hashes with NON-MATCHING Path/Filename (i.e. duplicate, moved, or renamed file):
- ECHO Note: This may take a while... estimate 1 minute per 1000 lines in largest log file:
- ECHO %fname%: %fline% lines / %fsizetime% minutes
- ECHO(
- ECHO MATCHING HASHES with NON-MATCHING Path/Filename (i.e. duplicate, moved, or renamed file): > "##_SAME_HASH_NONMATCHING_FILENAME_FILE1_FILE2.txt"
- findstr /G:"##_hash1.txt" /I /L "##_FILE2_clean.txt" > "##_HASH_IN_FILE2_MATCHING_FILE1.txt"
- findstr /G:"##_hash2.txt" /I /L "##_FILE1_clean.txt" > "##_HASH_IN_FILE1_MATCHING_FILE2.txt"
- (FOR /F "usebackq tokens=1-3 delims=," %%a in ("##_HASH_IN_FILE1_MATCHING_FILE2.txt") DO (
- FOR /F "usebackq tokens=1-3 delims=," %%q in ("##_HASH_IN_FILE2_MATCHING_FILE1.txt") DO (
- IF "%%b" EQU "%%r" (
- IF "%%c" NEQ "%%s" (
- ECHO %file1%: %%b %%c %%a
- ECHO %file2%: %%r %%s %%q
- SET "none=1"
- ECHO(
- )
- )
- )
- )
- ) >> "##_SAME_HASH_NONMATCHING_FILENAME_FILE1_FILE2.txt"
- IF NOT DEFINED none ECHO ALL CLEAR >> "##_SAME_HASH_NONMATCHING_FILENAME_FILE1_FILE2.txt"
- ECHO(>> "##_SAME_HASH_NONMATCHING_FILENAME_FILE1_FILE2.txt"
- TYPE "##_SAME_HASH_NONMATCHING_FILENAME_FILE1_FILE2.txt"
- ECHO ----------------------------------------------------------------
- ECHO ---------------------------------------------------------------- >> "##_SAME_HASH_NONMATCHING_FILENAME_FILE1_FILE2.txt"
- ECHO( >> "##_SAME_HASH_NONMATCHING_FILENAME_FILE1_FILE2.txt"
- ECHO Extracting Unique File Names:
- ECHO(
- ECHO Unique Hash/File Names in "%file1%": > "##_UNIQUE_FILES_FILE1.txt"
- SET "nomatch="
- SET "none="
- (FOR /F "usebackq tokens=1-3 delims=," %%a in ("##_HASH_IN_FILE1_NOT_IN_FILE2.txt") DO (
- FOR /F "usebackq tokens=1-3 delims=," %%q in ("##_HASH_IN_FILE2_NOT_IN_FILE1.txt") DO (
- IF "%%c" EQU "%%s" SET nomatch=1
- )
- IF NOT DEFINED nomatch (
- ECHO %%b %%c %%a
- SET "none=1"
- )
- SET "nomatch="
- )) >> "##_UNIQUE_FILES_FILE1.txt"
- IF NOT DEFINED none ECHO ALL CLEAR >> "##_UNIQUE_FILES_FILE1.txt"
- ECHO(>> "##_UNIQUE_FILES_FILE1.txt"
- TYPE "##_UNIQUE_FILES_FILE1.txt"
- ECHO ----------------------------------------------------------------
- ECHO ---------------------------------------------------------------- >> "##_UNIQUE_FILES_FILE1.txt"
- ECHO( >> "##_UNIQUE_FILES_FILE1.txt"
- ECHO Unique Hash/File Names in "%file2%": > "##_UNIQUE_FILES_FILE2.txt"
- @ECHO OFF
- SET "nomatch="
- SET "none="
- (FOR /F "usebackq tokens=1-3 delims=," %%a in ("##_HASH_IN_FILE2_NOT_IN_FILE1.txt") DO (
- FOR /F "usebackq tokens=1-3 delims=," %%q in ("##_HASH_IN_FILE1_NOT_IN_FILE2.txt") DO (
- IF "%%c" EQU "%%s" SET nomatch=1
- )
- IF NOT DEFINED nomatch (
- ECHO %%b %%c %%a
- SET "none=1"
- )
- SET "nomatch="
- )) >> "##_UNIQUE_FILES_FILE2.txt"
- IF NOT DEFINED none ECHO ALL CLEAR >> "##_UNIQUE_FILES_FILE2.txt"
- ECHO(>> "##_UNIQUE_FILES_FILE2.txt"
- TYPE "##_UNIQUE_FILES_FILE2.txt"
- ECHO ----------------------------------------------------------------
- COPY /A "##_datetime.txt" + "##_SAME_FILENAME_NONMATCHING_HASH_FILE1_FILE2.txt" + "##_SAME_HASH_NONMATCHING_FILENAME_FILE1_FILE2.txt" + "##_UNIQUE_FILES_FILE1.txt" + "##_UNIQUE_FILES_FILE2.txt" "#_HASHREPORT_%fname1%_vs_%fname2%.txt" >NUL
- ECHO ---------------------------------------------------------------- >> "#_HASHREPORT_%fname1%_vs_%fname2%.txt"
- ECHO( >> "#_HASHREPORT_%fname1%_vs_%fname2%.txt"
- ECHO OMITTED FILES CONTAINING (from 'excludecompare.txt'): >> "#_HASHREPORT_%fname1%_vs_%fname2%.txt"
- TYPE excludecompare.txt >> "#_HASHREPORT_%fname1%_vs_%fname2%.txt"
- ECHO( >> "#_HASHREPORT_%fname1%_vs_%fname2%.txt"
- ECHO( >> "#_HASHREPORT_%fname1%_vs_%fname2%.txt"
- ECHO COMPLETE: %DATE% %TIME% >> "#_HASHREPORT_%fname1%_vs_%fname2%.txt"
- ECHO(
- ECHO RESULTS SAVED IN "%batchpath%#_HASHREPORT_%fname1%_vs_%fname2%_%TIMESTAMP%.txt"
- REN "#_HASHREPORT_%fname1%_vs_%fname2%.txt" "#_HASHREPORT_%fname1%_vs_%fname2%_%TIMESTAMP%.txt"
- REM Clean up log files
- DEL /Q ##_*.txt 2>NUL
- ECHO(
- ECHO ** COMPLETE: %DATE% %TIME% **
- GOTO :END
- :END
- PAUSE
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement