部分Windows批處理指令碼整理

charsi發表於2014-02-25

在工作中有時候在Windows平臺需要使用到批處理指令碼進行一些定期的任務,來達到與UNIX平臺SHELL指令碼的功能,下面整理了幾個工作中用到的指令碼。

收集Java程式記憶體的記憶體使用情況
set nowtime=%date:~0,10% %time%
@echo %nowtime% >>D:\scripts\java_memo_mon.txt
tasklist |findstr java >>D:\scripts\java_memo_mon.txt
ping  123.45.67.89  -n  1  -w  1200000
@echo ------------------------------ >>D:\scripts\java_memo_mon.txt

使用tasklist命令可以檢視所有windows程式的記憶體使用情況及程式號,findstr有類似於UNIX平臺上grep的功能
只是windows平臺上沒有sleep類似的命令,因此只能取巧使用ping  123.45.67.89  -n  1  -w  1200000這個命令.
ping一個無效的IP地址
-w引數意思為等待每次回覆的超時時間,單位為毫秒
-n引數指要傳送的回顯請求數
ping  123.45.67.89  -n  1  -w  1200000 計算下來即等於等待20分鐘

******************************

刪除歷史檔案(此示例中為刪除380天以前的*.rar檔案)
set nowtime=%date:~0,10% %time%

@echo %nowtime% >>D:\backup\scripts\SQL_DATA_backup_del.log
forfiles /p D:\backup\SQL_DATA /s /m "*.rar" /d -380 >>D:\backup\scripts\SQL_DATA_backup_del.log
forfiles /p D:\backup\SQL_DATA /s /m "*.rar" /d -380 /c "cmd /c del @path"
@echo -------------------------------------------------- >>D:\backup\scripts\SQL_DATA_backup_del.log

使用forfiles命令,是Windows中類似UNIX/Linux中的find命令
/p引數指搜尋的路徑,本例中查詢D:\backup\SQL_DATA目錄
/s引數指遞迴,遞迴到每個子目錄
/m引數匹配搜尋的條件,預設為全部匹配即"*",示例中為"*.rar"
/d引數指檔案的上次修改時間,可以選擇具體日期前後(+/-)修改的檔案;也可以選擇當前時間減"dd"天。示例中意思為在380天前修改的檔案
/c引數後面指執行什麼樣的命令,示例中執行刪除命令

******************************

備份SQLServer資料庫的指令碼,採用了for迴圈,核心的是使用sqlserver中的osql命令
rem @echo off
set svr=sqldb
set svrrole=bozch
set nowtime=%date:~0,10% %time%
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set today=%year%-%month%-%day%
if "%time:~0,1%" == " " (set nowh=%time:~1,1%) else (set nowh=%time:~0,2%)
set rar="d:\Program Files\WinRAR\winRar.exe"
set rarlist="d:\backup\scripts\rarlst.txt"
set ftplist="d:\backup\scripts\ftplst.txt"
set baklog=d:\backup\scripts\tkblbackup.log
@echo. >> %baklog%
@echo -------------------------------------------------- >> %baklog%
@echo %nowtime% BackupScript is starting....... >> %baklog%

::資料庫備份語句,可新增多個資料庫
for %%a in (AVASOL AVA_EBS XM) do (
@echo %nowtime% BackupDB %%a is beginning....... >> %baklog%
@osql -s localhost -U sa -P circ0620 -Q "backup database %%a to disk='D:\backup\SQL_DATA\%%a_%svr%_%today%.bak' with init" >> %baklog%
    @echo. >>%baklog%

::Rar files
%rar% a -as -r -ep1 -ibck -df d:\backup\SQL_DATA\%%a_%svr%_%today%.bak.rar d:\backup\SQL_DATA\%%a_%svr%_%today%.bak  >> %baklog%

)
:: cd /d d:\backup\SQL_DATA
:: del *.bak

::echo. > %rarlist%
@echo -------------------------------------------------- >> %baklog%
@echo. >> %baklog%

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23850820/viewspace-1087776/,如需轉載,請註明出處,否則將追究法律責任。

相關文章