@echo off title %~nx0 REM check md5sum.exe if exist md5sum.exe set md5exe=ok if exist md5sum.exe set path=%cd%;%path% if exist .\UnxUtils\usr\local\wbin\md5sum.exe set md5exe=ok REM check diff.exe if exist diff.exe set diffexe=ok if exist .\UnxUtils\usr\local\wbin\diff.exe set diffexe=ok if "%md5exe%"=="" GOTO NOMD5EXE if "%diffexe%"=="" GOTO NODIFF REM ##################################### REM ### START REM ##################################### echo: echo ************************************************************** echo * * echo * === 指定ディレクトリツリーのMD5値をチェックします === * echo * * echo * **** md5sum.exe,diff.exe が必要です **** * echo * * echo * === サブディレクトリも対象なので時間かかります... === * echo * * echo * === 照合する md5sum ファイル が必要です。 === * echo * * echo ************************************************************** echo: echo 続行しますか? 中断は xボタン or Ctrl-C echo: echo *** 何かキーを押すと続行します *** pause >nul set path=%cd%\UnxUtils\usr\local\wbin;%path% set now=%date%_%time% set now=%now: =0% set now=%now:~-20,2%%now:~-17,2%%now:~-14,5%%now:~-8,2%%now:~-5,2% set diff_txt=%cd%\diff_check%now%.txt set chk_txt=%cd%\md5sum_check%now%.txt REM ##################################### REM ### ASK REM ##################################### :ASK set dirpath= cls echo: echo ============================================================== echo *** 対象ディレクトリは? *** echo ============================================================== echo: echo *** 無指定だとここのディレクトリが対象です *** echo *** ドライブ指定 : C: *** echo *** フルパスで指定 : C:\test *** echo *** 相対パスで指定 (ここの test なら) : test *** echo *** 相対パスで指定 (一つ上の test なら) : ..\test *** echo: echo * 中断するには 99 を入れてEnter * echo: set /p dirpath= ディレクトリ名: echo: for /f "usebackq delims=" %%I in ('%dirpath%') do set dirpath=%%~I if "%dirpath%"=="99" GOTO CANCEL if "%dirpath%"=="" set dirpath=%cd% echo %dirpath% | findstr : | findstr /v \\ >nul && set "dirpath=%dirpath%\" for /f "delims=" %%I in ("%dirpath%") do set dirpath=%%~fI if not exist "%dirpath%" GOTO WAIT for %%I in ("%dirpath%") do set dir_test=%%~aI if not "%dir_test:~0,1%"=="d" ( echo * %dirpath% はディレクトリじゃないです! && GOTO WAIT ) GOTO NAME :WAIT echo: echo ! ディレクトリがありません echo: echo *** 何かキーを押すと続行します *** pause >nul GOTO ASK :NAME set choice= cls echo: echo ============================================================== echo * 対象ディレクトリは echo * %dirpath% echo ============================================================== echo === * よろしいですか? * === echo === === echo === * 戻るには n を入れてEnter * === echo === * 中断するには 99 を入れてEnter * === echo ============================================================== echo: set /p choice= [Y,n,99 ]: if /i "%choice%"=="99" GOTO CANCEL if /i "%choice%"=="n" GOTO ASK GOTO ASK2 REM ##################################### REM ### ASK2 REM ##################################### :ASK2 set md5_txt= cls echo: echo ============================================================== echo *** 照合するMD5ファイルを指定シテクダサイ *** echo ============================================================== echo: echo *** 無指定だとここの md5sum.txt が対象です *** echo *** フルパスで指定 : C:\test\md5.txt *** echo *** 相対パスで指定 (ここの test なら) : test\md5.txt *** echo *** 相対パスで指定 (一つ上の test なら) : ..\test\md5.txt *** echo: echo * 中断するには 99 を入れてEnter * echo: set /p md5_txt= ファイル名: echo: for /f "usebackq delims=" %%I in ('%md5_txt%') do set "md5_txt=%%~I" if /i "%md5_txt%"=="99" GOTO CANCEL if "%md5_txt%"=="" set md5_txt=%cd%\md5sum.txt for /f "delims=" %%I in ("%md5_txt%") do set md5_txt=%%~fI if exist "%md5_txt%\" echo ! %md5_txt% はディレクトリのようです && GOTO WAIT2 if not exist "%md5_txt%" echo ! %md5_txt% がありません && GOTO WAIT2 GOTO NAME2 :WAIT2 echo: echo *** 何かキーを押すと続行します *** echo: pause >nul GOTO ASK2 REM ##################################### REM ### kakuninnnin REM ##################################### :NAME2 set choice2= cls echo: echo ============================================================== echo ====== 計算をはじめまする ===== echo ============================================================== echo * 対象ディレクトリは echo * %dirpath% echo * 照合する MD5 ファイル echo * %md5_txt% echo ============================================================== echo === * よろしいですか? * === echo === === echo === * 戻るには n を入れてEnter * === echo === * 中断するには 99 を入れてEnter * === echo ============================================================== echo: echo: set /p choice2= [Y,n,99 ]: if /i "%choice2%"=="99" GOTO CANCEL if /i "%choice2%"=="n" GOTO ASK2 REM ##################################### REM ### old file rename REM ##################################### :DIFFBACK if not exist "%diff_txt%" GOTO MAKE for %%I in ("%diff_txt%") do set bt=%%~tI set bt=%bt: =% set bt=%bt:~-13,2%%bt:~-10,2%%bt:~-7,2%_%bt:~-5,2%%bt:~-2,2%_%RANDOM% for %%I in ("%diff_txt%") do set backname=%%~nI_%bt%%%~xI ren "%diff_txt%" %backname% REM ##################################### REM ### MAKE REM ##################################### :MAKE pushd "%dirpath%" cls echo: echo: echo: echo 現在の MD5チェックサム を算出 echo: echo ... MD5チェックサムを算出しています ... echo: echo: echo: REM for /r %%x in (*) do md5sum.exe -b "%%x" >>"%chk_txt%" 2>&1 for /f "usebackq delims=" %%x in (`dir /a-d /b /s`) do md5sum.exe -b "%%x">>"%chk_txt%" 2>&1 if ERRORLEVEL 1 GOTO ERROR1 :DIFF popd echo: echo: echo: echo 照合します echo: echo ... diff で差分ファイルを作成しています ... echo: diff -c "%md5_txt%" "%chk_txt%" >"%diff_txt%" if ERRORLEVEL 2 GOTO ERROR2 if ERRORLEVEL 1 set hekou=ari echo: REM ##################################### REM ### DONE REM ##################################### :DONE cls echo: echo: echo ============================================================== echo: echo * 現在の md5sum_check%now%.txt をここに保存しました... * echo: echo *** diff でチェックしました... *** echo: if "%hekou%"=="" ( echo *** 変更はありません *** ) if "%hekou%"=="ari" ( echo *** diff_check%now%.txt を参照シテクダサイ。...*** ) echo: echo ============================================================== echo: GOTO END REM ##################################### REM ### ERROR REM ##################################### :NOMD5EXE echo: echo !md5sum.exe がありません ! GOTO NODIFF :NODIFF if not "%diffexe%"=="" GOTO NOFILES echo: echo !diff.exe がありません ! GOTO NOFILES :NOFILES echo: echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! echo !!! !!! echo !!! ! ファイルが足りないのて中断しますです... !!! echo !!! !!! echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! echo: GOTO END :NOMD5SUM echo: echo ============================================================== echo ! 照合するMD5ファイルがありません... ! echo ============================================================== echo: echo *** 何かキーを押すと続行します *** pause >nul GOTO MD5FILE :ERROR1 echo: echo ============================================================== echo ! md5sum.exe の実行でエラーが出たようです... ! echo ============================================================== GOTO END :ERROR2 echo: echo ============================================================== echo ! diff.exe の実行でエラーが出たようです... ! echo ============================================================== GOTO END :CANCEL echo: echo キャンセルしますた... GOTO END :END echo: echo *** 何かキーを押すと閉じます *** pause >nul