windows下常用的幾個批處理腳本


1.windows下對比兩個文件內容,有差異則執行一個任務:

適用場景:比如你的數據庫備份結果的日志每天會形成一個文件,如下圖,你可以通過此腳本檢測到文件的變化,並執行發送告警郵件通知你數據庫備份異常。

對比兩個文件.bat

rem 檢查Linux服務器上的異地備份情況並報警:yes.log為正常情況下的日志,如果新的日志和正常不符則報警。
rem 設置取當前的時間,格式:2018-02-06
set now=%Date:~0,4%-%Date:~5,2%-%Date:~8,2%
rem 當天的日志結果和標准日志對比,如一樣則ok,如不同則觸發郵件腳本“sendmillog.vbs”
fc /b %now%.log yes.log &&echo ok|| call sendmaillog.vbs

sendmaillog.vbs

'vbs發郵件 By 依夢琴瑤
 
'設置發信人郵箱地址
Sender = "xxxx.qq.com"

'設置發信人郵箱密碼
Sender_PassWord = "xxxx"

'設置發信人郵箱SMTP服務器地址
Smtp = "smtp.xxx.net"

'設置SMTP服務器端口
Port = 25

'設置收信人郵箱地址
Receiver = "xxxx@qq.com"

'設置附件文件路徑。
'Attachment = ""

'設置郵件主題
Subject = "數據備份異常"

'設置正文文本路徑。
Text = "數據備份異常,請查看日志."

NameSpace = "http://schemas.microsoft.com/cdo/configuration/"
Set Email = CreateObject("CDO.Message")
Email.From = Sender
Email.To = Receiver
Email.Subject = Subject
Email.Textbody = Text
'Email.AddAttachment Attachment
With Email.Configuration.Fields
    .Item(NameSpace&"sendusing") = 2
    .Item(NameSpace&"smtpserver") = Smtp
    .Item(NameSpace&"smtpserverport") = Port
    .Item(NameSpace&"smtpauthenticate") = 1
    .Item(NameSpace&"sendusername") = Sender
    .Item(NameSpace&"sendpassword") = Sender_PassWord
    .Item(NameSpace&"smtpconnectiontimeout") = 60
    .Update
End With
Email.Send
Set Email=Nothing
內容較長請展開查看

 

2.查看文件是否生成,或文件中是否有字段,加報警

適用場景:查看每天的數據庫備份文件是否生成,沒有生成則報警;查看每天的備份日志文件中是否有備份成功的字段,沒有則報警;

查找沒有某后綴的文件則郵件報警.bat

@echo off
rem 設置取當前的時間,格式:2018-02-06
set now=%Date:~0,4%-%Date:~5,2%-%Date:~8,2%
if exist "d:\test\%now%.dmp" (echo ok ) else (call sendmaildb.vbs)

 

查找某文件沒有某字符則郵件報警.bat

set now=%Date:~0,4%%Date:~5,2%%Date:~8,2%

rem 檢查windows服務器上的備份情況並報警:查看日志文件中有沒有正常的結尾信息,如果沒有則報警。

find /i "Export terminated successfully without warnings." D:\test\user%now%.log>nul
if %errorlevel% EQU 0  (echo ok) else (call sendmaillog.vbs)

 

查找某文件有某字符則郵件報警.bat

@echo off
find /i "ORA-" D:\test\*.log>nul
if %errorlevel% EQU 0 (call sendmaillog.vbs) else (echo ok)
pause

 

 

3.刪除過期的文件

適用場景:在磁盤容量有限的情況下,只保留最近一個周的備份數據,則需要我們每天自動刪除七天以前的備份數據

rem 查找test下7天前的備份並刪除
set now=%Date:~0,4%%Date:~5,2%%Date:~8,2%
rem forfiles /p "D:\test" /s /m *.* /d -7 /c "cmd /c del @path"

 

 將腳本日志進行導出:

方法一:

@echo off

(

echo 開始

.......

echo 完成!!!

) >> d:/test/dbbak.log 2> d:/test/dbbak_error.log

 

 方法2:

創建一個test.bat 內容為執行腳本和日志輸出,如下

D:\script\ggappbak.cmd > d:/test/dbbak.log 2> d:/test/dbbak_error.log

 到時候你執行test.bat就行

以上腳本需要配合win計划任務執行。

 

 4.檢測程序是否正常啟動,未啟動則嘗試啟動。

:1
tasklist | findstr /i nginx.exe > nul 2>nul
if %ERRORLEVEL%==1 (start nginx) else (exit)
ping 127.1 -n 20 >nul 2>nul
goto 1

 5.備份腳本

依次執行:復制→壓縮→ftp傳輸到異地→刪除臨時文件

啟動腳本:startbackup.cmd

D:\script\ggappbak.cmd > D:\script\log.txt 2> D:\script\error.txt

備份腳本:

ggappbak.cmd

rem 獲取當前服務器的IP地址,無需改動
for /f "tokens=2 delims=:" %%q in ('ipconfig^|find /i "ipv4"') do (set hostip=%%q )
set ipv4=%hostip:~1,-1%

rem 獲取當前系統日期,無需改動
set today=%date:~0,4%%date:~5,2%%date:~8,2%

rem 創建備份存放目錄,目錄命名為當前系統日期
mkdir D:\IPIBAK\%today%

rem 拷貝IPI目錄下的所有文件到備份目錄
xcopy /E /Y /H /K /R "D:\ipi" "D:\IPIBAK\%today%\"

rem 調用WinRAR程序對備份好的文件目錄進行壓縮,壓縮后的文件用IP地址命名
"D:\Program Files\WinRAR\WinRAR.exe" m -r -ep1 "D:\IPIBAK\%ipv4%_%today%.rar" "D:\IPIBAK\%today%\"

set ftpfilename=autoftp.cfg

rem ============== 創建FTP傳輸配置文件 ============== 
rem 連接指定端口的ftp
echo open 192.168.10.2 21>            "%ftpfilename%"

rem FTP用戶名
echo ggappbak>>                    "%ftpfilename%"

rem FTP密碼
echo password>>                 "%ftpfilename%"

rem FTP常見配置項
echo prompt>>                     "%ftpfilename%"
echo binary>>                     "%ftpfilename%"
echo quote opts utf8 off>>             "%ftpfilename%"

rem 定義向遠程FTP上傳壓縮好的備份文件
echo put D:\IPIBAK\%ipv4%_%today%.rar>>     "%ftpfilename%"
echo bye>>                     "%ftpfilename%"

rem ================================================= 

rem 執行ftp命令上傳壓縮好的備份文件,根據實際情況調整遠程FTP服務器的IP地址
ftp -s:"%ftpfilename%"

rem 清理本地產生的臨時文件
rd /s /Q D:\IPIBAK\
del "%ftpfilename%"

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM