[DOS]比對檔案是否異動

[DOS]比對檔案是否異動

紀錄一下處理過程

問題描述

正式環境的程式碼必須要有控管機制,防止程式員透過非正常程序(換版流程)去偷改。

解決方式

1. 統一換版時間。

2. 在非換版時間如果程式有異動,表示有人去動程式。

3. 寫排程去監控production的檔案狀態是否異動,在非換版時間如果程式有異動發Email通知系統管理員。

 

監控production的檔案狀態(檢查檔案是否異動.bat)


@title 檢查檔案是否異動
rem   iniPath:檔案資較夾的位置
set  iniPath=H:\開發區\2010Projects\TestMSBuild\
rem   CompileLog:比較結果位置
set  CompileLog=H:\CompileLog\

rem  開始比對檔案是否異動
if not exist %CompileLog%Before.txt goto nofile 
dir %iniPath% /s>%CompileLog%After.txt
fc %CompileLog%Before.txt %CompileLog%After.txt>%CompileLog%Result.txt
if errorlevel 2 goto errFileLost
if errorlevel 1 goto errDiffer
if errorlevel 0 goto errSame


rem 檢查比對結果是否異動
:errSame
  echo. is same
  goto displayresult

:errDiffer
  echo. is different
rem 寄送比對結果
	cscript mail.vbs  
  goto displayresult

:errFileLost
  echo. file is lost
  goto displayresult

:displayresult
dir %iniPath% /s>%CompileLog%Before.txt
if   errorlevel   1   (
echo  比對檔案失敗
)   ELSE   (
echo  比對檔案完成
) 
exit

:nofile 
dir %iniPath% /s>%CompileLog%Before.txt
dir %iniPath% /s>%CompileLog%After.txt

@echo   on


寄送通知信件(mail.vbs)(郵件主機允許匿名存取)


strSMTP = "testmailserver.com.tw"
Set objEmail = CreateObject("CDO.Message")
objEmail.From = "test@com.tw"
objEmail.To = "123456@com.tw"
objEmail.Subject = "[檢查正式環境異動]有檔案變更"
objEmail.Textbody = "檢查結果請參照附檔"
objEmail.Addattachment strLogFile
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTP
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update
objEmail.Send

測試結果

有人真的去偷改程式了

1

參考資料

透過VBScript寄送信件

DosBatch如何快速比對檔案內容