1. 程式人生 > >windows檔案轉移大法:robocopy的用法

windows檔案轉移大法:robocopy的用法

此篇內容為轉載:

經常進行檔案管理操作的朋友們,不滿意於Windows系統內建的複製功能,因為它太龜速了。於是大家就使用FastCopy、TeraCopy之類的軟體來加速複製,但是你是否知道Windows 7已經內建快速複製的功能?

這項功能就是RoboCopy,它是一個命令列的目錄複製命令,自從Windows NT 4.0 開始就成為windows 資源工具包的一部分,然後在Windows Vista、Windows 7和 Windows Server 2008採用作為標準的功能。Windows 7的此項功能也得到升級——已經可以支援多執行緒了,這就意味著可以大大提升複製速度。而且該功能可以建立兩個檔案結構完全的映象副本而不復制任何不需要的重複檔案,同時還允許您保留所有相關檔案資訊,包括日期和時間戳、安全訪問控制列表(ACL))等等。下面先看看這條命令的用法吧:

命令語法:ROBOCOPY source destination [file [file]…] [options]

源:源目錄(驅動器:\路徑或\\伺服器\共享\路徑) 目標:目標目錄(驅動器:\路徑或\\伺服器\共享\路徑) 檔案:要複製的檔案(名稱/萬用字元: 預設為 "*.*")

複製選項

/S:複製子目錄,但不復制空的子目錄。 /E:複製子目錄,包括空的子目錄。 /LEV:n:僅複製源目錄樹的前 n 層。 /Z:在可重新啟動模式下複製檔案。 /B:在備份模式下複製檔案。 /ZB:使用可重新啟動模式;如果拒絕訪問,請使用備份模式。 /EFSRAW:在 EFS RAW 模式下複製所有加密的檔案。 /COPY:複製標記:: 要複製的檔案內容(預設為 /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:程式包間的間距(ms),以釋放低速線路上的頻寬。 /SL:對照目標複製符號連結。 /MT[:n]:使用 n 個執行緒進行多執行緒複製(預設值為 8)。n 必須至少為 1,但不得大於 128。該選項與 /IPG 和 /EFSRAW 選項不相容。使用 /LOG 選項重定向輸出以便獲得最佳效能。

檔案選擇選項

/A:僅複製具有存檔屬性集的檔案。 /M:僅複製具有存檔屬性的檔案並重置存檔屬性。 /IA:[RASHCNETO]:僅包含具有任意給定屬性集的檔案。 /XA:[RASHCNETO]:排除具有任意給定屬性集的檔案。 /XF 檔案[檔案]…:排除與給定名稱/路徑/萬用字元匹配的檔案。 /XD 目錄[目錄]…:排除與給定名稱/路徑匹配的目錄。 /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 以來使用的檔案。(If n < 1900 then n = n days, else n = YYYYMMDD date)。 /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:檔案:將狀態輸出到日誌檔案(覆蓋現有日誌)。 /LOG+:檔案:將狀態輸出到日誌檔案(附加到現有日誌中)。 /UNILOG:檔案:以 UNICODE 方式將狀態輸出到日誌檔案(覆蓋現有日誌)。 /UNILOG+:檔案:以 UNICODE 方式將狀態輸出到日誌檔案(附加到現有日誌中)。 /TEE:輸出到控制檯視窗和日誌檔案。 /NJH:沒有作業標頭。 /NJS:沒有作業摘要。 /UNICODE:以 UNICODE 方式輸出狀態。

作業選項

/JOB:作業名稱:從命名的作業檔案中提取引數。 /SAVE:作業名稱:將引數儲存到命名的作業檔案 /QUIT:處理命令列後退出(以檢視引數)。 /NOSD:未指定源目錄。 /NODD:未指定目標目錄。 /IF:包含以下檔案。

這麼多的命令我不會用怎麼辦?你可以到官網下載微軟推出的Robocopy GUI,它提供互動介面使得使用簡化不少:

【複製測試】

我將一共達7.9G的《阿凡達》高清電影檔案,通過Robocopy、系統內建的複製功能和Terecopy三項分別複製到相同的目的地,複製過程中基本沒有進行其他系統操作,得出複製完成所需要的時間並比較

1、通過Robocopy命令複製檔案,使用最大執行緒128,花費的時間為6分02秒

2、使用系統內建的檔案複製功能,使用秒錶計時顯示時間為6分22秒

3、使用Terecopy複製,顯示使用5分32秒

測試速度大小結果:Terecopy > Robocopy命令 > 內建複製功能,可見Robocopy與專業的複製軟體在速度上有一定的差距,而且易用性比較差。但是在沒有安裝其他複製軟體的情況下,要想快速複製大量的檔案,Robocopy命令還是一個不錯的選擇。

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

----------------【例子】-------------------例項一:檔案,想怎麼複製就怎麼複製   [實現效果]   隨時將原始檔夾中的純文字(TXT)、Word文件(DOC)還有BMP、TIF影象檔案複製到目標資料夾中 ,這是在“資源管理器”中直接拖放所做不到的。[簡單命令] robocopy d:\work e:\back *.txt *.doc *.bmp *.tif /s  [引數講解]   將d:\work檔案下的TXT、DOC、BMP、TIF複製到e:\back資料夾,其他檔案則不復制。/s是表示包括 除空檔案下的所有子目錄,如果沒有則僅複製d:\work下的檔案而不包括子目錄。   [舉一反三]   (1)如果要將資料夾下的所有檔案包括空資料夾全部複製到目標資料夾,命令為:robocopy d:\work e:\back /e   /e表示複製所有子目錄包括空資料夾。   (2)如果只想複製兩個層級內的檔案(再下的層級裡的檔案則不拷貝),輸入命令:robocopy d:\work e:\back /e /lev:2   /lev:2表示複製的層級,比如指定層級後d:\work\soft(二級)下的檔案會被複制,而 d:\work\soft\office(***)下的檔案則不被複制。例項二:垃圾檔案不復制   [實現效果]在備份資料時,不可避免會將類似於*.bak、*.tmp的垃圾檔案也複製到目標資料夾,用 Robocopy可以將我們經常碰到的垃圾檔案在拷貝時就清理出家門,從而生成一個乾乾淨淨的資料夾。   [簡單命令]   robocopy d:\work e:\back /e /xf *.tmp *.bak   [引數講解]   /xf為指定不執行復制操作的檔案型別,後面的檔名支援萬用字元。如果引數為/xd,則表示排除後 面指定的資料夾。例項三:大檔案 我不要   [實現效果]   複製的時候,為了節省時間,需要將一些大檔案暫時不拷貝,等有空閒時間時,再執行復制操作不 遲。   [簡單命令]   robocopy d:\work e:\back /e /max:6000000   [引數講解]   僅複製不大於6000000bytes的檔案,/max:後直接接數值,數值單位為byte。如果是/min:1000,則 複製不小於1000bytes的檔案。兩個引數可以同時使用,界定複製檔案大小的範圍。例項四:只要這一週修改的檔案   [實現效果]   這一週處理了哪些文件?編輯了那些檔案?將這些修改了的文件複製到一個資料夾下,再好好回味 一下。本例就是要將d:\work中最近七天內新建或修改了的TXT、DOC、XLS、PPT等文件,複製到e:\look 目錄下。   [簡單命令]   robocopy d:\work e:\look /s *.txt *.doc *.xls *.ppt /maxage:7   [引數講解]   /maxage:表示最遠修改時間的,修改時間比這個還要舊的檔案將不會被複制。/maxage:後可接數字 ,也可以接日期,數字小於1900時表示天數,否則就得用YYYYMMDD來表示具體的日期    如/maxage:20040210表示2004年2月10日後被修改的檔案才允許複製。與之相對應的引數 是/minage,表示最近修改時間,比這個時間新的檔案將不被複制。   [舉一反三]   robocopy d:\work e:\look /s *.txt *.doc *.xls *.ppt /maxage:7 /minage:1   則表示近七天內除今天外修改的檔案才允許被複制。   與修改時間相對的還有最近訪問時間,/maxage指最遠訪問時間,比這個時間老的檔案將不被複制。 /minage是指最近訪問時間,比這個時間新的檔案將不被複制。例項五:我的文件排排站   [實現效果]   上例中複製時,所有的文件都會帶來本身的路徑資訊,文件是會將其所存放的資料夾也複製過來。 這給我們的翻閱檢視帶來很多不便,得單擊多層資料夾才能看到檔案,能不能將所有的文件直接複製到 一個資料夾下呢?這個需要用XXCOPY來實現。       [簡單命令]    xxcopy d:\work e:\look /s /in*.txt /in*.doc /sg /yy /da:2004-02-02 /DB:2004-02- 10/DA:1997-01-01   [引數講解]   此命令將d:\work中從2004年2月2日到2月10生成的 TXT、DOC檔案全部直接複製到e:\look目錄下, 不新建子資料夾,開啟e:\look就能看到所有檔案。XXCOPY和Robocopy的語法引數還是有較大差異的,表 示指定檔案型別時,XXCOPY會用/in*.*,表示日期時/da為在指定時間後,/db為在指定時間前,日期的 表示為YYYY- MM-DD。   另外,/sg表示複製檔案到同一資料夾,/yy表示在所有要求使用者應答的地方都自動認為是Yes,在執 行過程中不需要使用者干預。例項六:完全克隆   [實現效果]   我們一般採取的複製方式預設是增量複製,即根據檔案的大小、修改時間將原始檔夾裡的內容向目 標資料夾複製,久而久之,目標資料夾裡就可能存在大量源件夾裡早已經刪除且無用的檔案和資料夾。 如果要讓備份完全相同,即拷貝時刪除在目標資料夾裡存在但原始檔夾裡並沒有的檔案。   [簡單命令]   robcopy d:\work e:\look /mir   [引數講解]   /mir的作用等同於/purge /e,/purge表示清理目標資料夾有而原始檔夾裡沒有的檔案(夾)。通過 這個命令,能保證原始檔夾和目標資料夾結構與檔案完全相同。這在建立映象備份時,非常有用。例項七:移動檔案   [實現效果]   我們前面講的都是複製,如果我們要將資料夾移動到目標資料夾,如何操作呢?   [簡單命令]   robocopy d:\work e:\look /move /e   [引數講解]   其中,/move表示移動。例項八:我只要資料夾骨架   [實現效果]   筆者的工作需要週期性地新建和整理大量的資料夾,每次的資料夾結構一樣,只是檔案不盡相同。 如果是以前,就得一個一個簡單重複去製作,而現在就不需要了。Robocopy和XXCOPY可以讓你輕鬆實現 複製資料夾結構。   [簡單命令]   xxcopy d:\work e:\mystruct /t /yy /dl3   [引數講解]   將d:\work的三層資料夾結構複製到e:\mystruct中。其中/t表示建立資料夾結構,/dl3表示複製的 資料夾結構為***,數字可以自行輸入,如果沒有此引數,預設建立整個資料夾結構。   Robocopy建立資料夾相對要麻煩一些,/create引數不僅要建立結構,還要建立資料夾下所有檔案的 0位元組檔案,並非真正的結構,我們只好劍走偏鋒了。   robocopy d:\work e:\mystruct /e /lev:3 /minage:19000101   為Robocopy指定一個不可能建立檔案的時間,因為有引數/e 的作用,雖然沒有檔案符合要求(你機 器裡沒有早於1900年1月1日的檔案),但Robocopy還是會忠實地建立資料夾,這樣就達到了生成資料夾 結構的目的。另外,/lev:3表示複製資料夾的層級,同樣可以自行輸入。例項九:隱藏檔案我不要   [實現效果]   在預設狀態下,隱藏檔案是並不顯示的,但在複製的過程中,它還會隨著資料夾一起被複制。可不 可以將這些隱藏檔案排除在複製範圍之外呢?   [簡單命令]   robocopy d:\work e:\back /e /xa:h   [引數講解]   Robocopy支援對屬性進行操作。上面的命令將複製原始檔夾中全部檔案,但全部具有隱藏屬性的文 件將不會被複制。/xa:h,表示將具有隱藏屬性的排除出複製範圍,與之相對應的是/ia,表示包括只對 擁有指定屬性的執行操作。屬性有R:只讀,A:存檔,S:系統,H:隱藏等幾種供選擇。   [舉一反三]   (1)此外,Robocopy還有/a+、/a-等引數對檔案屬性進行操作,分別表示在檔案被拷貝後為檔案添 加、去除某屬性。   robocopy d:\work e:\back /ia:rs     表示只複製具有隻讀和系統屬性的檔案。   (2)robocopy c: d: /-a:rsh   表示將檔案拷貝到D盤後,將拷貝生成的檔案的只讀、系統、隱藏屬性去掉,以方便檢視和修改。例項十:NTFS許可權跟著走   [實現效果]   在使用Windows 2000、Windows XP時,在多使用者使用一臺電腦時或管理伺服器時,經常要為資料夾 指定使用者訪問和修改的許可權(如圖1,需要分割槽為NTFS)。不過,用一般的複製方式無法保留我們設定的 許可權,這在伺服器備份時意味著我們得重新設定使用者許可權。不過,Robocopy可以讓我們在複製檔案的時 候,將屬性、使用者許可權、所有者都可以一併複製到目標資料夾中。 備份雙友鄰精彩5例-Robocopy和xxcopy全掌握   [簡單命令]   robocopy d:\work e:\back /e /copyall   [引數講解]   /copyall等於/copy:datsou,表示將所有原始檔夾的資訊複製到目標資料夾中,其中D:檔案資料, A:檔案屬性,T:時間資訊,S:許可權資訊,O:所有者資訊,U:稽核資訊。   [舉一反三]   如果原始檔夾的許可權被修改,需要同樣更新目標資料夾的許可權時,我們不必再重複複製,只需輸入 robocopy d:\work e:\back /is /copy:sou   如果沒有/copy引數,預設為/copy:dat,沒有後面三項的資訊。例項十一:集中備份到檔案伺服器   [實現效果]   希望每天能夠把相應資料備份到檔案伺服器上,以免資料丟失。   [簡單命令]   robocopy d:\work \ctips_serverarticlesshare  /e /copyall   [引數講解]   從中可以看出,robocopy完全支援檔案伺服器共享資料夾資料的拷貝。   [舉一反三]   (1)如果我們建立了一個環境變數,如定義%databack%為\ctips_serverarticles\back,那隻要輸 入相應的命令:robocopy d:\work  %databack% /e /copyall 即可把d:\work下的檔案全部備份到 \ctips_serverarticles\back下。當然,如果\ctips_serverarticles\back空間不夠時,只要更換環境 變數的值到其他資料夾,如\ctips_serverarticles ewback,上述命令無需更改就可以反資料拷貝到新 的資料夾中。   (2)如果你只想把資料備份到共享資料夾中以你的機器名為名字的共享資料夾中,使用xxcopy會更 方便:xxcopy d:\work  \ctips_serverarticles/$HOST$ /e /yy 其中/$HOST$表示你的機器名,如你的 機器名為CTIPS_SYJ,那會把d:\work 資料夾下的檔案拷貝到\ctips_serverarticles\CTIPS_SYJ資料夾 下。如果你的機器名為CTIPS_MLB,那執行上述命令後就可以把d:\work 資料夾下的檔案拷貝到 \ctips_serverarticles\CTIPS_MLB資料夾下。由於同區域網內的機器名字不會相同,執行上述命令後就 可以保證資料不會被拷貝到同一資料夾下。例項十二:一動就備份   [實現效果]   有些工作內容非常重要,需要時時刻刻注意備份,可是我們哪裡有這麼好記性和耐性呢?這事,還 是交給 Robocopy來做吧。Robocopy能時時監視要備份的資料夾,只要資料夾修改到一定時間和程式, Robocopy就會立即開始備份。它會一直監視資料夾,除非使用者自己終止。   [簡單命令]   robocopy d:\work e:\back  /e /copyall /mot:1 /mon:2   [引數講解]   上述命令表示複製資料夾所有資訊到目標資料夾並進行監視。執行此命令後,命令提示符視窗如圖2 所示。一旦時間過了一分鐘,並且原始檔夾至少有或2處以上的修改,Robocopy就會自動啟動另一個程序 ,執行上述備份操作。Robocopy能監視原始檔夾結構、檔案和資料夾名稱、大小、最後修改時間,在這 裡,甚至連屬性和許可權等資訊被修改時,Robocopy也會記為修改次數。 備份雙友鄰精彩5例-Robocopy和xxcopy全掌握   /mot後接的是時間(分鐘),是指Robocopy執行操作的最短時間;/mon後接的是最少檔案修改個數 。在監視過程中,會自動記錄時間和修改的次數,只有同時符合以上兩個條件時,Robocopy才開始執行 ,執行完成後,這兩個資料會自動清零,並重新開始監視資料夾,除非使用者關閉命令提示符視窗或按下 Ctrl+Break鍵。   [舉一反三]   如果你要開機就監視並備份相應資料夾,則可以把上述命令放到“啟動”組中。例項十三:不到時間不備份   [實現效果]   複製的過程總會佔用系統資源,如果能設定在自己不在電腦邊上的時候開始複製備份,就會方便得 多。比如,每天5:50下班,希望下班後,到達6點時,Robocopy自動開始備份相應資料。   [簡單命令]   robocopy d:\work e:\back /e /rh:1800-1830   [舉一反三]   執行後,複製操作將會等待至指定時間開始(如圖3)。其中,RH格式為/RH:hhmm-hhmm,指定 Robocopy開始的時間段,在這個時間段外,拷貝會被暫停。時間為24小時格式,4個數字長,從0000到 2359,而且兩個數字不能相同。 備份雙友鄰精彩5例-Robocopy和xxcopy全掌握例項十四:計劃任務備份   以上的到時間備份、監視資料夾備份方式,每次重啟系統會都會要重新執行以上命令,還遠遠不夠 智慧,如果能和Windows的計劃任務配合,所有問題就迎刃而解了。以我們要在每天10:00自動呼叫 Robocopy開始監視備份資料夾為例,說一說計劃任務與Robocopy的攜手。   第一步:新建BAT檔案 新建一個批處理檔案autobak.bat,輸入如下命令 robocopy d:\work e:\back  /e /copyall  /mot:1 /mon:2   第二步:建立計劃任務 選擇“開始→設定→控制面板”,雙擊“任務計劃”圖示。把autobak.bat批處理檔案拖放到“任務計劃 ”視窗,然後雙擊新生成的autobak.bat圖示,在彈出視窗中設定其屬性。   第三步:設定開始時間 切換到“日程安排”標籤,單擊“任務計劃”下拉列表框,從中選擇“每天”,“開始時間”設定為 10:00,單擊“高階”可以設定起止的日期(如圖4)。   通過上述設定後,到了設定的時間,機器就會自動備份執行批處理檔案,自動備份並監視資料夾。 備份雙友鄰精彩5例-Robocopy和xxcopy全掌握例項十五:清理檔案也拿手   除了一般的複製功能,XXCOPY還有檔案清理功能,可以將不需要的檔案快速清理出硬碟。以下命令 會清除檔案和資料夾,請先建立測試資料夾掌握其操作後再對資料夾進行操作。 1.清除所有無用檔案 xxcopy  d:\work*.tmp /s /h /yy /rs /rs表示不復制而直接從原始檔夾中刪除指定檔案,/h表示指定隱藏和系統檔案。 2.清除資料夾 xxcopy  c: emp /rmdir /db:2002-01-01 /yy 刪除c: emp中在2002年1月1日前的修改的資料夾。 3.刪除空資料夾 xxcopy c: emp  /rmdir /sz:0 /yy 刪除c: emp下所有空資料夾,/sz:0指定大小為0的檔案(夾)。 4.刪除0位元組檔案 xxcopy c: emp*.*  /sz:0 /s /h /yy /rs 通過以上四種方式的組合,我們可以輕鬆實現對檔案及資料夾的整理工作。 最後,還有一幾個小技巧告訴你,希望能有利於你更好地使用XXCOPY和Robocopy。 ★將命令變成任務 在Robocopy加上“/save:任務名”可以將當前操作記錄為任務檔案,通過“/job:任務名”就可以方便調 用,不需要再輸入一長串的命令了。此任務檔案可以用純文字編輯器(如記事本)來編輯。 ★將複製備份過程錄下來 預設情況下,Robocopy的操作過程只是在命令提示符中顯示,我們可以讓它把操作過程輸出為TXT檔案, 加上“/log:檔名.txt”即可。