您当前的位置:首页 > 计算机 > 编程开发 > DOS/BAT与(脚本)

BAT批处理脚本案例--利用MD5判断文件是否发生变化

时间:04-16来源:作者:点击数:

由于对接zabbix监控的需要,需要判断指定文件内容是否发生变化,约定:返回1表示文件发生变化,返回0表示文件没有发生变化。bat/cmd 批处理脚步实现原理如下:

  • 读取生成的md5文件内容,得到旧的md5校验码,文件为空则校验码也为空;
  • 调用certutil计算指定文件的md5校验码,并保存到md5文件
  • 读取md5文件内容,得到新的md5校验码,并判断:两个校验码都不为空并且两者不等则返回1,否则返回0,具体事项如下:

1、file_changed.bat

@echo off & setlocal

rem 参数去引号处理
set arg1=%~1
set arg2=%~2

rem arg1文件路径不能为空
if "%arg1%"=="" goto usage
if not exist %arg1% goto usage

rem arg2 md5临时文件名,为空默认为文件名.md5
if "%arg2%"=="" set arg2=%arg1%

rem 先读取旧的md5值
if exist %arg2%.md5 (set /p md5_old=<%arg2%.md5)

rem 计算文件md5值,保存到md5文件
certutil -hashfile %arg1% MD5 | find /v ":" > %arg2%.md5

rem 读取新的md5值
set /p md5=<%arg2%.md5
set flag=0

rem 比较md5值是否变化,判断文件是否发生变化
if defined md5_old (
    if not "%md5_old%" == "%md5%" ( set flag=1 )
)

rem 输出1文件发生变化,0文件没发生变化
echo %flag%
exit /b 0

:usage
echo %0 filepath [md5name]
exit /b 1

2、用法如下

// 判断md5_tst.txt文件是否发生变化,第一次返回0,没变化
D:\bat_cmd>file_changed.bat md5_tst.txt
0

// 修改md5_tst.txt,再执行脚步,返回1,内容发生变化
D:\bat_cmd>file_changed.bat md5_tst.txt
1

// 再次执行脚本,返回0,内容相对上次没发生变化
D:\bat_cmd>file_changed.bat md5_tst.txt
0
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门