Robocopy命令實現文件服務器每日鏡像備份/增量備份操作

Robocopy是微軟推出的可靠文件複製服務,經過測試,比xcopy更加優秀,特別是在複製ACL及文件時間戳方面。
免費同步軟件通常在ACL同步這一塊比較薄弱,而付費軟件複雜操作,我們可以使用robocopy結合任務程序做到日常備份和增量備份。

Tips:
/dcopy:T 可以複製目錄時間戳。
如果未加則文件夾時間爲複製發生的時間點。如果你希望時間戳和源目錄一直,可以再執行一次命令,加/dcopy:T。

/log:日誌
測試的時候運行的話 加 /tee命令,這樣既能
/log+ 的話持續寫入同一個日誌。

注:windows7 or windows2008R2中 /dcopy只支持 /dcopy:T
鏡像同步 Left >Right
robocopy "c:\abc" "D:\abc" /mir /copyall /dcopy:DAT /mt:8 /z /xa:sht /a-:h /np /ts /w:1 /r:1 /XD "System Volume Information" /XD $RECYCLE.BIN /a-:H /log:H:\Log\Robocopy\RBLog.txt /tee
效果是將c盤的abc文件夾(包括abc本身的一切屬性),同步到D盤ABC文件夾內(D盤可以沒有abc文件夾,會自動創建,如果已經存在,會覆蓋abc的ACL),包括abc內一切文件&文件夾,包括所有的ACL和文件屬性,包括所有的文件創建,訪問,修改時間屬性。以8線程的速度運行。斷點續傳。並創建時間日誌。

增量備份
近期備份修改過的文件
robocopy c:\abc d:\monday /mir /copyall /dcopy:DAT /w:1 /r:1 /maxage:1 /mt:8
效果是將C\abc 內一天內所有修改過的文件備份到Monday文件夾內。
加/z 支持斷點續傳
Robocopy命令實現文件服務器每日鏡像備份/增量備份操作
/xa:h只能排除隱藏文件,目前沒有針對隱藏目錄的命令。只能用/XD 目錄名來排除隱藏目錄。
Robocopy命令實現文件服務器每日鏡像備份/增量備份操作
robocopy c:\ d:\aaa /e /XD “System Volume Information“” /XD $RECYCLE.BIN /a-:H
對於robocopy針對根目錄操作,需要去除System Volume Information和$RECYCLE.BIN這兩個目錄,用/XD參數,/A-:H清除隱藏文件夾屬性.


@echo off
title Robocopy每日定期鏡像備份腳本
echo.

echo 防呆:請修改此腳本配置並刪除此行
pause >nul

:設置當前日期名
set y=%date:~0,4%%date:~5,2%%date:~8,2%

:備份頻率 *
set pinlv=daily

:輸入備份時間 格式"22:00" *
set time=20:00

:存日誌、BAT、郵件插件 *
set weizhi=E:\RCMB%y%

:源路勁 *
set yuan="D:\abc"

:目標路勁 *
set mubiao="E:\abc"

:任務名字 *
set taskname=DailyMBCopy

:設置郵件
set [email protected]
set user=abc
set pass=password
set [email protected],[email protected]
set smtp=smtp.yeah.net

:郵件腳本形參
set a=%%y%%
set b=%%~dp0Log\Robocopy\RBLog%%y%%.txt
set c=%%~dp0Log\Blatmail\Maillog%%y%%.txt
set d=Robocopy鏡像複製任務已經完成
set e=%from%
set f=%user%
set g=%pass%
set h=%to%
set i=%smtp%

if exist "%weizhi%" goto abc
md "%weizhi%"
md "%weizhi%\Log"
md "%weizhi%\Log\Robocopy"
md "%weizhi%\Log\Blatmail"

if exist "%mubiao%" goto abc
md "%mubiao%"

:創建複製腳本
echo @echo off >%weizhi%\robocopy_sc.bat
echo title 執行RCMB任務腳本ING >>%weizhi%\robocopy_sc.bat
:當凌晨0點開始到10點前,如果用網上的批處理命名方式,會有個空格。導致無法應用名字。
echo if "%%time:~0,2%%" lss 10 (set y=%%date:~0,4%%%%date:~5,2%%%%date:~8,2%%%%time:~1,1%%%%time:~3,2%%) else (set y=%%date:~0,4%%%%date:~5,2%%%%date:~8,2%%%%time:~0,2%%%%time:~3,2%%)>>%weizhi%\robocopy_sc.bat
:加/tee可以在執行命令的時候查看進度 /np關閉了文件百分比 /xa:sht 排除了系統,隱藏,臨時文件 /mt:8啓用8線程
echo robocopy %yuan% %mubiao% /mir /copyall /dcopy:DAT /mt:8 /z /xa:sht /a-:h /np /ts /log:%weizhi%\Log\Robocopy\RBLog%%y%%.txt ^>nul >>%weizhi%\robocopy_sc.bat
echo start "" %weizhi%\blatmail\blatmail.bat %a% %b% %c% %d% %e% %f% %g% %h% %i% ^>nul >>%weizhi%\robocopy_sc.bat

:創建一個查看並執行任務的測試腳本
echo @echo off >%weizhi%\RunRobocopySchtaskImmediately.bat
echo title 查看並執行該任務 >>%weizhi%\RunRobocopySchtaskImmediately.bat
echo echo ------------------------------------------------------------------------------------->>%weizhi%\RunRobocopySchtaskImmediately.bat
echo schtasks /query /tn %taskname% /v /fo list>>%weizhi%\RunRobocopySchtaskImmediately.bat
echo echo ------------------------------------------------------------------------------------- >>%weizhi%\RunRobocopySchtaskImmediately.bat
echo echo. >>%weizhi%\RunRobocopySchtaskImmediately.bat
echo echo. >>%weizhi%\RunRobocopySchtaskImmediately.bat
echo echo. >>%weizhi%\RunRobocopySchtaskImmediately.bat
echo echo 任意鍵立刻執行該任務 >>%weizhi%\RunRobocopySchtaskImmediately.bat
echo pause >nul >>%weizhi%\RunRobocopySchtaskImmediately.bat
echo schtasks /run /tn %taskname% >>%weizhi%\RunRobocopySchtaskImmediately.bat
echo echo 任意鍵退出 >>%weizhi%\RunRobocopySchtaskImmediately.bat
echo pause >nul >>%weizhi%\RunRobocopySchtaskImmediately.bat
echo exit >>%weizhi%\RunRobocopySchtaskImmediately.bat

:複製郵件程序
robocopy "%~dp0blatmail" "%weizhi%\blatmail" /e >nul

:創建任務
schtasks /create /sc %pinlv% /tn %taskname% /tr "%weizhi%\robocopy_sc.bat" /st %time% /rl highest /f
echo 任意鍵查看該任務
pause >nul
cls
echo.
echo.
echo.
echo -------------------------------------------------------------------------------------
schtasks /query /tn %taskname% /v /fo list
echo -------------------------------------------------------------------------------------
echo "按任意鍵繼續"
pause >nul
goto abcd
:abcd
start "" %weizhi%
start "" %mubiao%
exit

:abc
cls
echo.
echo.
echo.
echo.
echo 目錄已經存在 請手動刪除後重試
echo 任意鍵退出
pause >nul
exit


另一個腳本爲Robocopy每日定時增量備份。
詳情見下載。

最後用Blatmail發送郵件。下載可見。


這是運行腳本後自動創建的目錄文件夾。
Robocopy命令實現文件服務器每日鏡像備份/增量備份操作

腳本配置每日定時同步計劃任務
Robocopy命令實現文件服務器每日鏡像備份/增量備份操作
效果如下
Robocopy命令實現文件服務器每日鏡像備份/增量備份操作

Robocopy命令實現文件服務器每日鏡像備份/增量備份操作

這是郵件效果:
Robocopy命令實現文件服務器每日鏡像備份/增量備份操作

附件中爲Robocopy同步與增量同步腳本,Blatmail文件。

http://down.51cto.com/data/2446578


如果XP需要用到Robocopy軟件,可以直接使用GUI版本的Robocopy,安裝需要.net 2.0。
https://technet.microsoft.com/zh-tw/library/2006.11.utilityspotlight.aspx

Robocopy命令實現文件服務器每日鏡像備份/增量備份操作

如果希望用戶點擊後就改變“訪問時間”,然後以訪問時間來做robocoy的拷貝的話,可以參考如下文章。
“爲什麼文件屬性中的“訪問時間”和“修改時間”不一致?“
https://blog.csdn.net/D_R_L_T/article/details/74611126

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章