批處理方式實現的目錄比較工具
2020-06-09 13:46:22
供稿:網友
更新日志:
v4:
1.增加了計算的進度顯示;
2.找了新版的 md5sum.exe,沒有對動態庫的依賴。
工具一:md5comv4.bat 接受兩個目錄參數,計算兩個目錄里每個文件的 md5 值,并給出報表文件 md5v4.txt,使用方法:
md5omv4.bat <目錄1> <目錄2>
根據這 md5comv4.bat 生成的報表文件 md5v4.txt,可以找到兩個目錄中
1:同名而且 md5 相同的文件;
2:同名但是 md5 不同的文件;
3:不同名但是 md5 相同的文件;
4:同一目錄中不同名但是 md5 相同的文件。
注意事項:
1:md5comv4.bat 不接受路徑帶有空格的目錄名,但是可以接受帶有空格的文件名;
2:md5 的計算由 md5sum.exe 完成;
3:md5comv4.bat 運行時會產生大量臨時文件,這些文件由工具自動維護,不必手工清理。
這個工具都是命令行方式、文本界面的,對于習慣使用圖形界面的朋友來說,可能不方便,因此,不推薦習慣使用圖形界面的朋友使用。
代碼如下:
@echo off
setlocal enableextensions enabledelayedexpansion
rem 作者:rubble@126.com
rem 17:55 2009-4-14 版本:0.4
set dira=%~1
set dirb=%~2
if "%1" == "" (
echo 使用說明:請在命令行參數上指明兩個目錄,或在這里按提示輸入。
echo 命令行參數格式:批處理名 ^<目錄1^> ^<目錄2^>
echo.
set /p dira=請輸入第一個目錄的名字(可拖放并輸入回車):
)
echo.
if "%2" == "" (
echo 使用說明:請在命令行參數上指明兩個目錄,或在這里按提示輸入。
echo 命令行參數格式:批處理名 ^<目錄1^> ^<目錄2^>
echo.
set /p dirb=請輸入第二個目錄的名字(可拖放并輸入回車):
)
if "%dira%" == "" exit /b
if "%dirb%" == "" exit /b
for /F "delims=. tokens=1" %%A in ("%TIME%") do set startTime=%%A
for /F "delims=: tokens=1,2,3" %%A in ("%startTime%") do (
set startH=%%A
set startM=%%B
set startS=%%C
)
set TEMPDIR=TEMPMD5/
rd /Q /S %TEMPDIR% 1>NUL 2>NUL
md %TEMPDIR%
set mdfive=md5v4.txt
rem 已處理的文件數
set count=0
rem 文件夾 %dira% 和 %dirb% 里的文件總數
set total_count=0
rem 已處理的臨時文件數
set tmpf_count=0
rem 臨時文件總數,已知有 5 個了。其余的是 md5 值的個數
set tmpf_total_count=5
echo 第 1/2步,正在計算,請稍候……
echo 正在比較 %dira% 和 %dirb% 中的文件的 md5 值 > %mdfive%
set list_fn_md=%TEMPDIR%list_fn_md
set list_fn_nmd=%TEMPDIR%list_fn_nmd
set list_fn_oa=%TEMPDIR%list_fn_oa
set list_fn_ob=%TEMPDIR%list_fn_ob
set list_all_md=%TEMPDIR%list_all_md
call :COUNTFILES %dira%
call :COUNTFILES %dirb%
for /f "delims=" %%a in ('dir /b /a:-d "%dira%/*"') do (
set fn=%%~nxa
for /f "tokens=1 delims= " %%A in ('md5sum "%dira%/%%a"') do set mda=%%A