2025年3月21日 星期五 甲辰(龙)年 月廿 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > DOS/BAT与(脚本)

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

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

由于对接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
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门