Exploring and Thinking

自動備份Log的Batch小程式

這兩天有備份Log的需求,想要讓電腦自動排程備份資料,不用定期整理、備份這些Log。需求很簡單,使用Dos的Batch檔指令即可完成。

在日期方面有點難度,我想要的是上個月資料而非今天,所以參考如何在 Batch 檔取得系統的日期、時間欄位 (第三版)文章來取得資料。
取得上個月資料的寫法:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
REM 取得今天的年、月、日 (自動補零)
SET TodayYear=%date:~0,4%
SET TodayMonthP0=%date:~5,2%
SET TodayDayP0=%date:~8,2%

REM 取得今天的年、月、日 (純數字)  
REM 2010/08/03 更新:以下是為了修正 Batch 遇到 08, 09 會視為八進位的問題  
IF %TodayMonthP0:~0,1% == 0 (  
    SET /A TodayMonth=%TodayMonthP0:~1,1%+0  
) ELSE (  
    SET /A TodayMonth=TodayMonthP0+0  
)  
  
IF %TodayMonthP0:~0,1% == 0 (  
    SET /A TodayDay=%TodayDayP0:~1,1%+0  
) ELSE (  
    SET /A TodayDay=TodayDayP0+0  
)  
  
echo 日期 %TodayYear%/%TodayMonth%/%TodayDay%  
echo 日期 %TodayYear%/%TodayMonthP0%/%TodayDayP0%  

REM 取得上個月的年、月  
SET /A LastMonthYear=%TodayYear%+0  
SET /A LastMonthMonth=%TodayMonth%-1  
SET /A LastMonthMonthP0=%LastMonthMonth%  
REM 修正年份與月份的數值  
IF %LastMonthMonth% EQU 0 (SET /A LastMonthYear=%thisYear%-1)  
IF %LastMonthMonth% EQU 0 (SET LastMonthMonth=12)  
IF %LastMonthMonth% LSS 10 (SET LastMonthMonthP0=0%LastMonthMonth%)  
  
echo 日期 %LastMonthYear%/%LastMonthMonth%  
echo 日期 %LastMonthYear%/%LastMonthMonthP0%  

接著將上個月的檔案撈出來壓縮,WinRAR可以抓到檔案的修改日期,若檔名無法判斷日期出來,則需附上-ta參數,01代表該月1號。其他參數表示:a (新增壓縮檔)、-r (含子目錄)、-m5 (最大壓縮比)。

以此例來說,因檔名有日期,所以後方搭配日期和星號即可,我兩種方法都寫出來。

第二、三步則是將檔案複製過去,再刪除原本產生的rar檔案。

1
2
3
4
5
"C:\Program Files\WinRAR\WinRAR.exe" a -r -ep -m5 -ta%LastMonthYear%%LastMonthMonthP0%01 "D:\log\%LastMonthYear%%LastMonthMonthP0%.rar" "D:\source\%LastMonthYear%%LastMonthMonthP0%*_XML.LOG"

xcopy "D:\log\%LastMonthYear%%LastMonthMonthP0%.rar" \\10.0.1.1\log

del /s/q D:\log\%LastMonthYear%%LastMonthMonthP0%.rar

我在另一個環境使用相同的方法時,遇到WinRAR壓縮時卡住不動,研判可能目錄的檔案太多,使用7z則不會有這個問題。複製檔案也無法傳送,或許檔案太大,因此用另一種方式處理。

程式1、4行單純寫入執行的過程是否成功。第2行使用7z壓縮欲備份的檔案、第3行使用ftp上傳壓縮檔。

1
2
3
4
5
echo ----- %date% %time% ----- >> d:\ian\log.txt
"C:\Program Files\7-zip\7zG.exe" a -r -mx9 "d:\Ian\%LastMonthYear%%LastMonthMonthP0%.7z" "d:\backup\%LastMonthYear%%LastMonthMonthP0%*"
ftp -s:d:\Ian\nas.txt
echo ----- %LastMonthYear%%LastMonthMonthP0%.7z 備份成功 ----- >> d:\ian\log.txt
del /s/q d:\Ian\8561_%LastMonthYear%%LastMonthMonthP0%.7z

ftp上傳需好幾個步驟,所以我另外建一個nas.txt檔讓ftp讀。程序如下:

第1行指定要連結的電腦IP(該電腦需開啟FTP服務),第2、3行輸入帳號、密碼,第4行指定binary傳輸,第5行設定不詢問問題(例如問我是否真的要上傳檔案),第6行切換ftp主機內的目錄,第7行將檔案上傳,第8行結束。

1
2
3
4
5
6
7
8
open hostIP
account
password
binary
prompt off
cd 子目錄
mput d:\Ian\*.7z
bye

實際應用大致上是這種作法,提供大家參考,若有更好的方式歡迎交流囉!
Share:

熱門文章