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

由于对接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
这是两个用批处理方式实现的目录比较工具: 工具一:sha1comv3.bat 接受两个目录参数,计算两个目录里每个文件的 sha1 值,并给出报表文件 sha1v3.txt,使用方法: sha1comv3.bat 根据这 sha1comv3.bat 生成的报表文件 sha1v3.txt,可以找现两个目录中 1:同名而且 sha1 相同的文件; 2:同名但是 sha1 不同的文件; 3:不同名但是 sha1 相同的文件; 4:同一目录中不同名但是 sha1 相同的文件。 工具二:md5comv3.bat 接受两个目录参数,计算两个目录里每个文件md5 值,并给出报表文件 md5v3.txt,使用方法: md5omv3.bat 根据这 md5comv3.bat 生成的报表文件 md5v3.txt,可以找现两个目录中 1:同名而且 md5 相同的文件; 2:同名但是 md5 不同的文件; 3:不同名但是 md5 相同的文件; 4:同一目录中不同名但是 md5 相同的文件。 注意事项: 1:sha1comv3.batmd5comv3.bat 都不接受路径带有空格的目录名,但是可以接受带有空格的文件名; 2:sha1 和 md5 的计算由 md5sum.exe 和 sha1sum.exe 完成,libiconv2.dll 和 libintl3.dll 是两个可执行文件需要的动态库; 3:sha1comv3.batmd5comv3.bat 运行时会产生大量临时文件,这些文件由工具自动维护,不必手工清理。 这两个工具都是命令行方式、文本界面的,对于习惯使用图形界面的朋友来说,可能不方便,因此,不推荐习惯使用图形界面的朋友使用。 有问题请写邮件到 rubble@126.com。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值