2017年9月11日 星期一

robocopy - 好用的複製指令

robocopy - 好用的複製指令

Win7Server2008之後的cmd均有內建該指令,有別於XCOPYROBOCOPY可用的參數更多、實用性與複製效率更高。

只要開啟cmd後,先輸入指令
---------------------------------
robocopy  /?
---------------------------------


接著就會出現可用的參數:(參考如下)
-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows
-------------------------------------------------------------------------------

  已啟動 : 2017911 上午 11:18:39
           使用方式 :: ROBOCOPY source destination [file [file]...] [options]

             source :: 來源目錄 (drive:\path \\server\share\path)
        destination :: 目的地目錄  (drive:\path \\server\share\path)
               file :: 要複製的檔案  (名稱/萬用字元: 預設值是 "*.*")

::
:: 複製選項 :
::
                 /S :: 複製子目錄,但是空的子目錄例外。
                 /E :: 複製子目錄,包括空的子目錄。
             /LEV:n :: 只複製來源目錄的前 n 層。

                 /Z :: 在可重新啟動模式複製檔案。
                 /B :: 在備份模式複製檔案。
                /ZB :: 使用可重新啟動模式; 如果拒絕存取,則使用備份模式。
                 /J :: 使用無緩衝的 I/O 複製 (建議使用於大型檔案)
            /EFSRAW :: EFS RAW 模式複製所有加密檔案。

  /COPY:copyflag[s] :: 要為檔案複製什麼內容 (預設值是 /COPY:DAT)
                       (複製旗標: D=資料、A=屬性、T=時間戳記)
                       (S=安全性=NTFS ACLO=擁有者資訊、U=稽核資訊)


               /SEC :: 複製包含安全性的檔案 (相當於 /COPY:DATS)
           /COPYALL :: 複製所有檔案資訊 (相當於 /COPY:DATSOU)
            /NOCOPY :: 不複製檔案資訊 (可用於 /PURGE)
            /SECFIX :: 修正所有檔案的安全性,即使略過的檔案也包含在內。
            /TIMFIX :: 修正所有檔案的檔案時間,即使略過的檔案也包含在內。

             /PURGE :: 刪除來源已經不存在的目的地檔案/目錄。
               /MIR :: 鏡像樹狀目錄 (相當於 /E /PURGE)

               /MOV :: 移動檔案 (複製後從來源刪除)
              /MOVE :: 移動檔案和目錄 (複製後從來源刪除)

     /A+:[RASHCNET] :: 將指定的屬性新增至複製的檔案。
     /A-:[RASHCNET] :: 從複製的檔案移除指定的屬性。

            /CREATE :: 只建立樹狀目錄和長度為零的檔案。
               /FAT :: 只使用 8.3 FAT 檔案名稱,建立目的地檔案。
               /256 :: 關閉特長路徑 (> 256 個字元) 支援。

             /MON:n :: 監視來源; 看到 n 個字元以上時再次執行。
             /MOT:m :: 監視來源; m 分鐘後如果變更,則再次執行。

      /RH:hhmm-hhmm :: 執行時數 - 新複本可以開始的時間。
                /PF :: 根據每一個檔案為基礎,檢查執行時數
                       (不是根據每一次通過)

             /IPG:n :: 慢速線路可用頻寬,封包之間的差距 (毫秒)

                /SL :: 複製符號連結與目標。

            /MT[:n] :: n 個執行緒執行多執行緒複製 (預設值為 8)
                       n 必須至少為 1,但不可以大於 128
                       此選項與 /IPG /EFSRAW 選項不相容。
                       使用 /LOG 選項重新導向輸出,以獲得更好的效能。

 /DCOPY:copyflag[s] :: 對於目錄,要複製哪些項目 (預設值是 /DCOPY:DA)
                       (複製旗標: D=資料、A=屬性、T=時間戳記)

           /NODCOPY :: 不複製目錄資訊 (預設會執行 /DCOPY:DA)

         /NOOFFLOAD :: 複製檔案 (不使用「Windows 複本卸載」機制)

::
:: 檔案選取選項 :
::
                 /A :: 只複製已設定保存屬性的檔案。
                 /M :: 只複製包含保存屬性的檔案並重設。
    /IA:[RASHCNETO] :: 只包含附帶任何指定屬性的檔案。
    /XA:[RASHCNETO] :: 排除附帶任何指定屬性的檔案。

 /XF file [file]... :: 排除符合指定名稱/路徑/萬用字元的檔案。
 /XD dirs [dirs]... :: 排除符合指定名稱/路徑的目錄。

                /XC :: 排除變更的檔案。
                /XN :: 排除較新的檔案。
                /XO :: 排除較舊的檔案。
                /XX :: 排除其他檔案和目錄。
                /XL :: 排除孤立的檔案和目錄。
                /IS :: 包含相同的檔案。
                /IT :: 包含調整的檔案。

             /MAX:n ::檔案大小上限 - 排除大於 n 個位元組的檔案。
             /MIN:n :: 檔案大小下限 - 排除小於 n 個位元組的檔案。

          /MAXAGE:n :: 檔案期限上限 - 排除 n /日期之前的檔案。
          /MINAGE:n :: 檔案期限下限 - 排除 n /日期之後的檔案。
          /MAXLAD:n :: 上次存取日期上限 -排除自 n 日後未使用的檔案。
          /MINLAD:n :: 上次存取日期下限 - 排除自 n 日後使用的檔案。
                       (如果 n < 1900 n = n 日,否則 n = YYYYMMDD 日期)

                /XJ :: 排除連接點。(一般會預設包含)

               /FFT :: 使用 FAT 檔案時間 (2 秒精細度)
               /DST :: 補償 1 小時 DST 時差。

               /XJD :: 排除目錄的連接點。
               /XJF :: 排除檔案的連接點。

::
:: 重試選項:
::
               /R:n :: 失敗複本的重試次數: 預設值是 1 百萬次。
               /W:n :: 重試之間等候時間: 預設值是 30 秒。

               /REG :: /R:n /W:n 儲存至登錄中,變成預設值。

               /TBD :: 等候共用名稱。即將定義 (重試錯誤 67)

::
:: 記錄選項:
::
                 /L :: 限清單 - 不複製、刪除任何檔案或加上戳記。
                 /X :: 報告所有其他檔案,不僅是這些選取的檔案而已。
                 /V :: 產生詳細資訊輸出,顯示略過的檔案。
                /TS :: 在輸出中包含來源檔案時間戳記。
                /FP :: 在輸出中包含檔案的完整路徑名稱。
             /BYTES :: 將大小列印成位元組。

                /NS :: 沒有大小 - 不記錄檔案大小。
                /NC :: 沒有類別 - 不記錄檔案類型。
               /NFL :: 沒有檔案清單 - 不記錄檔案名稱。
               /NDL :: 沒有目錄清單 - 不記錄目錄名稱。

                /NP :: 無進度 - 不顯示複製百分比。
               /ETA :: 顯示複製的檔案預估到達時間。

          /LOG:file :: 輸出狀態至記錄檔 (覆寫現有的記錄檔)
         /LOG+:file :: 輸出狀態至記錄檔 (附加至現有的記錄檔)

       /UNILOG:file :: 輸出狀態至記錄檔,變成 UNICODE (覆寫現有的記錄檔)
      /UNILOG+:file :: 輸出狀態至記錄檔,變成 UNICODE (附加至現有的記錄檔)

               /TEE :: 輸出至主控台視窗,以及記錄檔。

               /NJH :: 沒有工作標頭。
               /NJS :: 沒有工作摘要。

           /UNICODE :: 輸出狀態為 UNICODE

::
:: 工作選項:
::
       /JOB:jobname :: 從命名的工作檔案取得參數。
      /SAVE:jobname :: 將參數儲存至命名的工作檔案
              /QUIT :: 處理命令列後結束 (檢視參數)
              /NOSD :: 未指定來源目錄。
              /NODD :: 未指定目的地目錄。
                /IF :: 包含以下檔案。

::
:: 備註 :
::
       在磁碟區的根目錄上使用 /PURGE /MIR 將會
       導致 robocopy 也對 System Volume Information
       目錄內的檔案上套用要求的作業。如果這並非
       預期,則可以使用 /XD 參數來指示 robocopy
       略過該目錄。

--------------------------------------------------------------------------------------

=====================================================
個人常用範例,需求有
1.      需要將網路磁碟機來源A資料夾複製到目的地B資料夾
2.      且做定期的差異備份,比對只要有修改過的、新出現的檔案/資料夾,就會做備份,且會刪除目的地與來源端不相符的檔案、資料夾
3.      超過512mb的檔案就不作複製(單位為位元組)
4.      失敗重試1(預設三次、每次失敗後等待30秒再試)
5.      每次執行,在指定目錄產生log檔案,如果有多筆複製指令,會複寫在當天檔案
6.      每個檔案複製時不顯示百分比(不然log檔會有很多無意義的資訊、且變得很龐大)
7.      顯示每個比對/複製的檔案開始/結束時間(log檔的話則不會出現在執行視窗,記錄在log檔內)

所以我會用下列指令:(其指令說明可參考robocopy /?)
----------------------------------------------------------------------------------------
robocopy \\192.168.1.7\共用 \\192.168.4.7\共用 /e /xo /purge /max:524288000 /R:1 /NP /ETA /LOG+:H:\nas_robocopy_log\ %date:~0,4%%date:~5,2%%date:~8,2%.log
----------------------------------------------------------------------------------------
補充說明:雖然也可以用 /mir 參數,直接做鏡像,作用同 /e /purge,但是實作下來效率似乎不若/e /xo /purge,加上 /xo,可以排除較舊檔案,增加複製的效率,也比較符合自己的需求


設定完成,在欲執行的主機內,加入排程工作即可

沒有留言:

張貼留言

創用 CC 授權條款
本著作由Clement_Hsu製作,以創用CC 姓名標示-非商業性-相同方式分享 4.0 國際 授權條款釋出。