@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 if "%md5exe%"=="" GOTO NOFILE REM ##################################### REM ### START REM ##################################### echo: echo ************************************************************** echo * * echo * === 指定ディレクトリツリーのMD5値をチェックします === * echo * * echo * **** md5sum.exe が必要です **** * echo * * echo * === サブディレクトリも対象なので時間かかります... === * echo * * echo * === md5sum.txt を作成します === * echo * * echo ************************************************************** echo: echo 続行しますか? 中断は xボタン or Ctrl-C echo: echo *** 何かキーを押すと続行します *** pause >nul set path=%cd%\UnxUtils\usr\local\wbin;%path% set md5file=%cd%\md5sum.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 /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 ) GOTO NAME :WAIT echo: echo ! ディレクトリがありません echo: echo *** 何かキーを押すと続行します *** pause >nul GOTO ASK REM ##################################### REM ### kakuninnnin REM ##################################### :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 ### old file rename REM ##################################### :MD5BACK if not exist "%md5file%" GOTO MAKE for %%I in ("%md5file%") 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 ("%md5file%") do set backname=%%~nI_%bt%%%~xI ren "%md5file%" %backname% GOTO MAKE REM ##################################### REM ### MAKE REM ##################################### :MAKE cls pushd %dirpath% echo: echo: echo: echo ... MD5チェックサムを算出しています ... echo: echo: REM for /r %%x in (*) do md5sum.exe -b "%%x" >>"%md5file%" 2>&1 for /f "usebackq delims=" %%x in (`dir /a-d /b /s`) do md5sum.exe -b "%%x">>"%md5file%" 2>&1 if ERRORLEVEL 1 GOTO ERROR1 REM ##################################### REM ### DONE REM ##################################### :DONE cls echo: echo: echo: echo ============================================================== echo * %md5file% を保存しました。 echo ============================================================== echo: GOTO END REM ##################################### REM ### ERROR REM ##################################### :NOFILE echo: echo !md5sum.exe がありません ! GOTO NOFILES :NOFILES cls echo: echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! echo !!! !!! echo !!! ! ファイルが足りないのて中断しますです... !!! echo !!! !!! echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! echo: GOTO END :ERROR1 echo: echo ============================================================== echo ! md5sum.exe の実行でエラーが出たようです... ! echo ============================================================== GOTO END :CANCEL echo: echo キャンセルしますた... GOTO END :END echo: echo *** 何かキーを押すと閉じます *** pause >nul