【Windows bat】Windows环境下文件MD5校验脚本

本文介绍了如何在Windows环境下编写一个用于文件MD5校验的bat脚本,详细阐述了脚本的功能,包括生成MD5值、日志记录和计划任务设置。脚本会检查*.verify文件,生成.server.md5文件,对比客户端和服务端的MD5值,并记录日志。同时,提供了在Windows Server 2012上设置计划任务的步骤,以便定期执行校验。

目录

1、校验脚本功能说明:

2、校验脚本内容:

4、校验脚本测试结果:

5、校验脚本测试日志:

6、Windows计划任务添加


1、校验脚本功能说明:

        1.获取待检查状态的数据文件(*.verify),并生成该文件的md5值,输出一个ftp服务端校验文件(文件名称.server.md5)

        2.将上面校验结果日志输出到指定目录,并按照每天一个文件输出。

        3.读取*.server.md5文件,判定数据文件是否还存在,不存在校验MD5值输出文件。

        4.客户端MD5值与服务端MD5值对比结果输出内容日志

        5.校验文件大小以字节为单位输出到日志中。

2、校验脚本内容:

@echo off
chcp 936
setlocal enabledelayedexpansion
rem 根据当前日期获取,年月日串
set YYYYmmdd1=%date:~0,4%-%date:~5,2%-%date:~8,2%
set hhmiss1=%time:~0,2%:%time:~3,2%:%time:~6,2%:%time:~9,2%
set YYYYmmdd=%date:~0,4%%date:~5,2%%date:~8,2%
set hhmiss=%time:~0,2%%time:~3,2%%time:~6,2%
echo ===========Welcome===========
echo start %YYYYmmdd1% %hhmiss1%
set "date_time=%YYYYmmdd1% %hhmiss1%"
echo= 
echo ========Get all file paths in the directory==========
rem 日志文件路径(日志目录如果没有请手动创建)
set log_file=D:\FTP\dev_test
rem 日志级别信息文件输出
set log_name_debug=md5_check_debug-%YYYYmmdd%.log
set log_name_info=md5_check_info-%YYYYmmdd%.log
set log_name_error=md5_check_error-%YYYYmmdd%.log
rem 获取待检查状态的数据文件(*.verify)目录(校验文件目录,根据实际目录路径修改)
set  verify_file=D:\FTP\dev_test
rem MD5生成文件路径
rem set  "MD5_pwd=E:"
rem set  "MD5_file_name=check_file_list-%YYYYmmdd%%hhmiss%"
set  "MD5_file_name=check_file_list"
rem MD5文件名列表
set "output=%verify_file%\%MD5_file_name%.txt"
echo=  >>%log_file%\%log_name_debug%
echo %date:~,10% %time:~,11% ========Start running MD5 check bat========== >>%log_file%\%log_name_debug%
echo %date:~,10% %time:~,11% Create MD5 file list:%output% >>%log_file%\%log_name_debug%
echo= 

forfiles /p %verify_file% /m *.verify /d -0  >%output%
echo ========Start MD5 verification and save file==============
set hash=MD5
for /f   %%i in (%output%)  do (
		echo %%i
	set verify_tmp=%%i
	  call :gethash %hash% !verify_tmp! rs						
	rem 生成校验MD5文件
	for %%I in (!verify_tmp!) do (
	 if exist %verify_file%\%%~nI.client.md5 (
					echo %date:~,10% %time:~,11% %verify_file%\%%~nI.client.md5	File exists >>%log_file%\%log_name_debug%
				    		rem 获取文件大小字节为单位
					for /f "delims=" %%i in ('dir /b /s  %verify_file%\%%~nI.verify') do (
						echo %%~zi
					)
					
		  if exist %verify_file%\%%~nI.server.md5 (
	        echo %date:~,10% %time:~,11% MD5 check file:%%~nI.server.md5 already exists	>>%log_file%\%log_name_debug%
	    ) else (
	    		echo %date:~,10% %time:~,11% MD5 check file does not exist. Start creating MD5 check file	>>%log_file%\%log_name_debug%
	    		echo %date:~,10% %time:~,11% file:!verify_tmp! md5: !rs!	>>%log_file%\%log_name_debug%
	    		

	    		echo  !rs! >%verify_file%\%%~nI.server.md5.tmp
	    		
	    		echo %date:~,10% %time:~,11% MD5 verification tmp file creation completed	>>%log_file%\%log_name_debug%

						rem 获取client.md5值
					for /f "delims=" %%c in ('type %verify_file%\%%~nI.client.md5') do (
						    echo %date:~,10% %time:~,11% file:%verify_file%\%%~nI.client.md5 md5:%%c 	>>%log_file%\%log_name_debug%

				 	(for /f "delims=" %%a in (%verify_file%\%%~nI.server.md5.tmp) do (
					set "line=%%a"
					set "line=!line: =!"
						rem 对比client.md5和server.md5值
						if "%%c"=="!line!" (
									echo %date:~,10% %time:~,11% MD5 check %%~nI.client.md5:%%c and %%~nI.server.md5:!line! identical	>>%log_file%\%log_name_debug%
									echo %date:~,10% %time:~,11% file:!verify_tmp!  size:%%~zi  md5:!line! status:identical	>>%log_file%\%log_name_info%
						) else (
						     echo %date:~,10% %time:~,11% MD5 check %%~nI.client.md5:%%C and %%~nI.server.md5:!line! Different	>>%log_file%\%log_name_debug% 
						     echo %date:~,10% %time:~,11% file:!verify_tmp!  size:%%~zi  md5:!line! status:Different	>>%log_file%\%log_name_error%
						)
					echo !line!> %verify_file%\%%~nI.server.md5
					rem echo %date:~,10% %time:~,11% file:!verify_tmp!  size:%%~zi  md5:!line! check:%md5_check%	>>%log_file%\%log_name_info%
					echo %date:~,10% %time:~,11% MD5 verification file creation completed	>>%log_file%\%log_name_debug%
					del %verify_file%\%%~nI.server.md5.tmp
					echo %date:~,10% %time:~,11% MD5 verification del %%~nI.server.md5.tmp file creation completed	>>%log_file%\%log_name_debug%
					))
				)
	    )
		)
 )
)

:gethash
rem 参数1-3 1:hash函数名  2:文件名 3:返回hash值
for /f "skip=1 delims=" %%i in ('certutil -hashfile "%verify_file%\%2" %~1') do (
  set %3=%%i& goto :eof
)
pause
exit

3、校验脚本测试:

校验文件路径,根据实际情况定义,windows_check_file_md5.bat脚本文件和校验文件同一目录。

对应脚本路径:

rem 获取待检查状态的数据文件(*.verify)目录(校验文件目录,根据实际目录路径修改)

set  verify_file=D:\FTP\dev_test

        

运行bat文件。

4、校验脚本测试结果:

4.1、测试文件结果展示:

        

4.1、校验MD5字符串结果文件展示:

        

5、校验脚本测试日志:

日志每天生成一个,日志目录没有需要自行创建。

对应脚本路径:

rem 日志文件路径(日志目录如果没有请手动创建)

set log_file=D:\FTP\dev_test

rem 日志级别信息文件输出

set log_name_debug=md5_check_debug-%YYYYmmdd%.log

set log_name_info=md5_check_info-%YYYYmmdd%.log

set log_name_error=md5_check_error-%YYYYmmdd%.log

5.1、debug日志信息展示:

        

5.1、Info日志信息展示:

        

5.2、error日志信息展示:

        

6、Windows计划任务添加

通过Windows server 2012系统为例添加计划任务程序,定时每分钟执行脚本。

以下为添加流程图:

最后点击运行,每分钟执行脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值