網頁

Tools -- Windows 7內建多執行緒複製備份檔案的超強指令robocopy

robocopy是一個Windows 7內建DOS指令,它提供了一個可使用多執行緒來複製檔案,當你有很多檔案需要複製時,它可是比xcopy或Windows UI的複製、貼上還好且更快。

C:\>robocopy /?
-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows
-------------------------------------------------------------------------------
  已啟動 : Tue Mar 22 10:40:03 2011
              使用方式 :: 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 :: 使用可重新啟動模式; 如果拒絕存取,則使用備份模式。
            /EFSRAW :: 在 EFS RAW 模式複製所有加密檔案。
  /COPY:copyflag[s] :: 要為檔案複製什麼內容 (預設值是 /COPY:DAT)。
                       (複製旗標: D=資料、A=屬性、T=時間戳記)。
                       (S=安全性=NTFS ACL、O=擁有者資訊、U=稽核資訊)。
           /DCOPY:T :: 複製目錄時間戳記。
               /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 選項重新導向輸出,以獲得更好的效能。
::
:: 檔案選取選項 :
::
                 /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 :: 包含以下檔案。

參數有點多,但使用方式很簡單:


robocopy 來源目錄 目的地目錄 [檔案] 參數

檔案:預設是 *.*,即全部複製,所以可以省略。
參數:這是此指令的重點所在,robocopy提供了非常細部的設定,可以讓我們控制整個複製的過程中,什麼是我們想的,什麼是我們不想的。而且除了複製,robocopy還提供了比對功能,而比對功能讓我們可以實現「備份」。

備分範例

robocopy 來源 目的 /e /xo /purge



/e :代表複製子資料夾,含空的資料夾
/xo :排除較舊的檔案,意思是來源端沒有比目的地新時,就不複製(差異化備份,很重要的參數)
/purge :刪除來源中,不再存在的資料夾或檔案(差異化備份,很重要的參數)

也就是說,robocopy非常合適拿來寫批次檔,然後放到工作排程器中定期執行。另外,如果指令對你而言太難了,那網路上有人寫了一個Robocopy GUI版本,基本上是和robocopy相同,只是透過GUI勾選。

robocopy的參數是一大障礙,但當你常用,你會發現常用的就是那幾個,而且查詢也很方便。我一直在想,為什麼在Windows系統不提供一個man(Linux下的指令查詢指令)。

1 則留言:

  1. 請問/xc /xn怎麼用呢? 用了都沒有效果?

    回覆刪除

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。