@echo off
setlocal enableextensions enabledelayedexpansion
rem 作者:
[email protected] 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
set /a count=!count!+1
call :PROGRESS !count! !total_count!
if "!mda:~0,1!" == "/" set mda=!mda:~1,1024!
rem 以 !mda! 為文件名,記錄 md5 為 !mda! 的文件
call :ADDMDFN "%TEMPDIR%!mda!" "%dira%/!fn!"
rem 把 md5 值記錄到文件里,保證不重復
call :ADDMDLIST !mda!
if exist "%dirb%/!fn!" (
for /f "tokens=1 delims= " %%A in ('md5sum "%dirb%/!fn!"') do set mdb=%%A
set /a count=!count!+1
call :ADDMDFN "%TEMPDIR%!mdb!" "%dirb%/!fn!"
call :PROGRESS !count! !total_count!
if "!mdb:~0,1!" == "/" set mdb=!mdb:~1,1024!
if "!mda!" == "!mdb!" (
rem 記錄文件名相同并且 md5 相同的文件
echo !mda! !mdb! !fn! >> "!list_fn_md!"
) else (
rem 記錄文件名相同但 md5 不相同的文件
echo !mda! !mdb! !fn! >> "!list_fn_nmd!"
call :ADDMDLIST !mdb!
)
) else (
rem 記錄只在 %dira% 中出現的文件
echo !mda! !fn! >> "!list_fn_oa!"
)
)
for /f "delims=" %%a in ('dir /b /a:-d "%dirb%/*"') do (
set fn=%%~nxa
if not exist "%dira%/!fn!" (
for /f "tokens=1 delims= " %%A in ('md5sum "%dirb%/%%a"') do set mdb=%%A
if "!mdb:~0,1!" == "/" set mdb=!mdb:~1,1024!
rem 記錄只在 %dirb% 中出現的文件
echo !mdb! !fn! >> "!list_fn_ob!"
rem 把 md5 值記錄到文件里,保證不重復
call :ADDMDLIST !mdb!
call :ADDMDFN "%TEMPDIR%!mdb!" "%dirb%/!fn!"
set /a count=!count!+1
call :PROGRESS !count! !total_count!
)
)
echo 第 2/2步,正在統計,請稍候……
echo 統計:>>%mdfive%
echo 左:%dira% >> %mdfive%
echo 右:%dirb% >> %mdfive%
if not exist "%list_fn_md%" set /a tmpf_total_count-=1
if not exist "%list_fn_nmd%" set /a tmpf_total_count-=1
if not exist "%list_fn_oa%" set /a tmpf_total_count-=1
if not exist "%list_fn_ob%" set /a tmpf_total_count-=1
if not exist "%list_all_md%" set /a tmpf_total_count-=1
echo 兩個目錄中都存在且 md5 相同的文件:>> %mdfive%
call :OUTPUTLIST "%list_fn_md%"
echo ===============================================================================================>> %mdfive%
echo 左:%dira% >> %mdfive%
echo 右:%dirb% >> %mdfive%
echo 兩個目錄中都存在但 md5 不相同的文件:>> %mdfive%
call :OUTPUTLIST "%list_fn_nmd%"
echo ===============================================================================================>> %mdfive%
echo 只在目錄 %dira% 中存在的文件:>> %mdfive%
call :OUTPUTLIST "%list_fn_oa%"
echo ===============================================================================================>> %mdfive%
echo 只在目錄 %dirb% 中存在的文件:>> %mdfive%
call :OUTPUTLIST "%list_fn_ob%"
echo ===============================================================================================>> %mdfive%
echo 以 md5 匯總的文件列表:>> %mdfive%
call :OUTPUTLIST_MD "%list_all_md%"
goto ALLDONE
rem 統計文件夾里的文件數目,放到全局變量 total_count 里
:COUNTFILES
if %1=="" goto :EOF
for /f %%a in ('dir /b /a:-d "%~1/*"') do (
set /a total_count=!total_count!+1
)
goto :EOF
rem 參數 %1 必須加雙引號
:OUTPUTLIST
if %1 == "" goto :EOF
if not exist %1 goto :EOF
set tcnt=0
for /f "tokens=1* delims= " %%a in (%~1) do (
echo %%a %%b >> %mdfive%
set /a tcnt+=1
)
echo !tcnt! >> %mdfive%
set /a tmpf_count+=1
call :PROGRESS !tmpf_count! !tmpf_total_count!
goto :EOF
rem 參數 %1 必須加雙引號
:OUTPUTLIST_MD
if %1 == "" goto :EOF
if not exist %1 goto :EOF
set /a tmpf_count+=1
call :PROGRESS !tmpf_count! !tmpf_total_count!
set md_count=0
for /f "tokens=1* delims= " %%a in (%~1) do (
echo %%a >> %mdfive%
set tcnt=0
for /f "tokens=1* delims= " %%A in (!TEMPDIR!%%a) do (
echo %%A %%B >> %mdfive%
set /a tcnt+=1
)
set /a tmpf_count+=1
call :PROGRESS !tmpf_count! !tmpf_total_count!
echo !tcnt! >> %mdfive%
set /a md_count+=1
echo. >> %mdfive%
)
echo %md_count% >> %mdfive%
goto :EOF
rem 函數:把 md5 值保存到一個名為 !list_all_md! 的文件里,
rem 并保證不保存重復的 md5 值
:ADDMDLIST
if %1 == "" goto :EOF
if exist "!list_all_md!" (
rem 這里的 delims 要么刪除,要么做成像下面這行的樣子,在等號后面加個空格
rem for /f "tokens=1 delims= " %%a in (!list_all_md!) do (
for /f "tokens=1 " %%a in (!list_all_md!) do (
if "%%a" == "%1" goto :EOF
)
)
echo %1 >> "!list_all_md!"
rem 記錄臨時文件總數
set /a tmpf_total_count+=1
goto :EOF
rem 函數:以 %1 為文件名,保存 %2
rem %1:在這個應用里是 md5 值
rem %2:md5 值為 %1 的文件
:ADDMDFN
if %1 == "" goto :EOF
if %2 == "" goto :EOF
echo %2 >> %1
goto :EOF
:PROGRESS
set tips=
set backspace=
set /a percent=%1*100/%2
set /a char=%1%%7
set /a bnum=%percent%/10
set /a snum=10-%bnum%
for /L %%a in (1, 1, %bnum%) do set /p=
主站蜘蛛池模板:
久久精品国产99国产精品亚洲
|
国产91一区二区三区
|
欧美国产永久免费看片
|
精品国产一区二区三区天美传媒
|
日韩欧美色综合
|
性欧美xxxx极品摘花
|
久久精品黄
|
成人午夜一区
|
色视频91|
色啪综合
|
亚洲一区在线国产
|
国产不卡av在线
|
天天草天天操
|
少妇淫片免费一级毛片
|
国产精品久久久久久久久久东京
|
成人男女啪啪免费观看网站四虎
|
欧美成人小视频
|
久久久久久久不卡
|
无遮挡一级毛片视频
|
蜜桃视频在线免费播放
|
色av成人天堂桃色av
|
欧美激情精品久久久久久久久久
|
免费国产在线精品
|
中文字幕综合在线观看
|
最新精品在线
|
天堂在线资源av
|
亚洲综合视频网站
|
91av在线免费播放
|
japanese末成年free
|
久久2019中文字幕
|
玩偶姐姐在线观看免费
|
巨根插入
|
成人午夜在线免费观看
|
精品久久一区二区三区
|
久久久久国产成人精品亚洲午夜
|
久久国产精品电影
|
美国一级黄色毛片
|
国产精品热
|
精品亚洲成a人在线观看
|
媚药按摩痉挛w中文字幕
|
老子午夜影院
|