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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章