@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\md5.txt が必要です。 === * echo * * echo ************************************************************** echo: echo 続行しますか? 中断は xボタン or Ctrl-C echo: echo *** 何かキーを押すと続行します *** pause >nul set path=%cd%\UnxUtils\usr\local\wbin;%path% set chk_txt=md5_check.txt set diff_txt=diff.txt GOTO ASK REM ##################################### REM ### ASK REM ##################################### :ASK set dirpath= cls echo: echo ============================================================== echo *** 対象ディレクトリは? *** echo ============================================================== echo: echo *** 無指定だとここの ディレクトリが対象です *** 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 /i "%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 /f "delims=" %%I in ("%dirpath%") do set dir_test=%%~aI if not "%dir_test:~0,1%"=="d" ( echo * %dirpath% はディレクトリじゃないです! && GOTO WAIT ) if not exist "%dirpath%\md5sum\md5.txt" GOTO WAIT2 GOTO NAME :WAIT echo: echo ! ディレクトリがありません echo: echo *** 何かキーを押すと続行します *** pause >nul GOTO ASK :WAIT2 echo: echo ! .\md5sum\md5.txt がありません echo: echo *** 何かキーを押すと続行します *** pause >nul GOTO ASK REM ##################################### REM ### kakuninnnin REM ##################################### :NAME :NAME set choice= cls echo: echo ============================================================== echo ====== 計算をはじめまする ===== echo ============================================================== echo * 対象ディレクトリは echo * %dirpath% echo ============================================================== echo === * よろしいですか? * === echo === === echo === * 戻るには n を入れてEnter * === echo === * 中断するには 99 を入れてEnter * === echo ============================================================== echo: set /p choice= [Y,n,99 ]: echo: if /i "%choice%"=="99" GOTO CANCEL if /i "%choice%"=="n" GOTO ASK REM ##################################### REM ### Check Directory REM ##################################### :CHK_DIR set nakami=nasi dir /a-d /b "%dirpath%" >nul 2>nul && set nakami=ari if "%nakami%"=="ari" GOTO CHBACK cls echo: echo ============================================================== echo: echo ! * %dirpath%\ echo ! echo ! * ファイルがなくなっているようですです.... echo: echo * === サブディレクトリはチェックしません... === * echo: echo *** 何かキーを押すと以前の MD5ファイルを表示します *** echo: echo ============================================================== echo: pause >nul GOTO EMPTY REM ##################################### REM ### old file rename REM ##################################### :CHBACK pushd "%dirpath%" set md5_txt=%dirpath%\md5sum\md5.txt set md5_txt=%md5_txt:\\=\% set chk_txt=%dirpath%\md5sum\md5_check.txt set chk_txt=%chk_txt:\\=\% set diff_txt=%dirpath%\md5sum\diff.txt set diff_txt=%diff_txt:\\=\% if not exist "%chk_txt%" GOTO DIFFBACK for /f "delims=" %%I in ("%chk_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 /f "delims=" %%I in ("%chk_txt%") do set backname=%%~nI_%bt%%%~xI ren "%chk_txt%" %backname% GOTO DIFFBACK :DIFFBACK if not exist "%diff_txt%" GOTO CHECK for /f "delims=" %%I in ("%diff_txt%") do set backname=%%~nI_%bt%%%~xI ren "%diff_txt%" %backname% GOTO CHECK REM ##################################### REM ### MAKE REM ##################################### :CHECK cls echo: echo: echo: echo ... MD5チェックサムを算出しています ... echo: REM for %%x in (*) do md5sum.exe -b "%%x" >>"%chk_txt%" 2>&1 for /f "usebackq delims=" %%x in (`dir /a-d /b`) do md5sum.exe -b "%%x" >> "%chk_txt%" 2>&1 if ERRORLEVEL 1 GOTO ERROR1 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: echo * 現在のMD5を echo * %chk_txt% に echo * 保存しました echo: echo * diff でチェックしました... echo: if "%hekou%"=="" ( echo *** 変更はありません *** ) if "%hekou%"=="ari" ( echo * %diff_txt% を参照シテクダサイ... ) echo: echo ============================================================== echo: if "%hekou%"=="" GOTO END if "%hekou%"=="ari" ( echo *** 何かキーを押すとdiff.txt を表示します *** ) echo: pause >nul echo: echo ============================================================== echo: type "%diff_txt%" echo: echo ============================================================== GOTO END :EMPTY echo: type "%dirpath%\md5sum\md5.txt" 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 :NOTEXT echo: echo ============================================================== echo ! md5.txt がありません... ! echo ============================================================== echo: GOTO END :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