在日期方面有點難度,我想要的是上個月資料而非今天,所以參考如何在 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 |
實際應用大致上是這種作法,提供大家參考,若有更好的方式歡迎交流囉!