為什么沒辦法在 Windows 7 下加快 Windows 7 中文件復制/傳輸功能呢?可以用 robocopy 實現(xiàn)多線程文件復制。
經(jīng)常進行文件管理操作的朋友們,提到復制/粘貼操作,深度系統(tǒng)下載想必很多人還會回想起當初 Vista 奇慢的復制速度,不滿意于 Windows 系統(tǒng)內(nèi)置的復制功能,因為它太龜速了。于是大家就使用 FastCopy、TeraCopy 之類的軟件來加速復制,Windows 7 隨后則是修復了這一問題,但效果似乎也不理想,但是你是否知道 Windows 7 已經(jīng)內(nèi)置快速復制的功能?
解決方案:
建議如果你要拷貝包含多個大容量文件的目錄,那就需要使用 RoboCopy 命令了,它是一個命令行的目錄復制命令,自從 Windows NT 4.0 開始就成為 windows 資源工具包的一部分,然后在 Windows Vista、Windows 7 和 Windows Server 2008 采用作為標準的功能內(nèi)置,這個工具不僅復制速度非???,而且支持斷點續(xù)傳,甚至可以支持在制定的時間定時進行拷貝。Windows 7 中的此項功能也得到升級?D?D已經(jīng)可以支持多線程了,這就意味著可以大大提升復制速度。而且該功能可以創(chuàng)建兩個文件結構完全的鏡像副本而不復制任何不需要的重復文件,同時還允許您保留所有相關文件信息,包括日期和時間戳、安全訪問控制列表(ACL))等等。對那種N多小文件目錄的復制能把速度提高一個數(shù)量級 ,幾千個文件3秒就復制完了,而常用的復制粘貼方式大概需要45秒。
例如要把光盤F:\里的所有文件拷貝到E盤的\CD目錄下,雨林木風系統(tǒng)可以運行以下命令:
Robocopy /s F:\ E:\CD
即使此時突然取出光盤,也無妨,robocopy 會一直等待,直到把光盤重新放入光驅又會自動開始拷貝。
Robocopy 還支持局域網(wǎng)拷貝,甚至可以把局域網(wǎng)服務器中指定目錄的目錄結構全部搬到本地,robocopy 支持在定時操作,就可以把復制的操作放到晚上進行,以免擁塞局域網(wǎng),給別人帶來不便。
下面先看看這條命令的用法,如下圖所示:
如:RoBoCopy dir_from dir_to /E /MT:50 /LOG:copy.log
其中/E表示包含子目錄,/MT:50是用50個線程(默認8個線程,最大可設128個),/LOG是重定向輸出。更多選項可以用robocopy /?查看。
命令語法:ROBOCOPY source destination [file [file]...] [options]
源:源目錄(驅動器:\路徑或\\服務器\共享\路徑)
目標:目標目錄(驅動器:\路徑 或 \\服務器\共享\路徑)
文件:要復制的文件(名稱/通配符: 默認為 "*.*")
為了測試復制文件的速度,做了如下的測試
能夠從上圖中看到在120個線程的情況下,復制大小為878.16MB的單個文件,從14:56:31開始,14:57:06結束,共用了35秒得時間。
小路工作室(www.wzlu.com)建議為了能夠測試在選取多少線程數(shù)可以更快速的拷貝文件,采用PowerShell腳本進行批處理逐個測試不同線程的情況下復制所需要的時間與線程的對應關系,并將其在坐標上描點作圖,測試的PowerShell腳本如下:
for($i=128;$i ?Clt 129;$i++){
Robocopy /s C:\CD C:\test\CD$i /MT:$i /LOG:log/copy$i.log
remove-item C:\\test\CD$i\*.*
"$i ," >>log/answ.txt
(Get-Content C:\log\copy$i.log -TotalCount 6)[-1] >>log/answ.txt
"," >>log/answ.txt
(Get-Content C:\log\copy$i.log -TotalCount 10000)[-1] >>log/answ.txt}
將腳本輸出的內(nèi)容經(jīng)過格式規(guī)整,通過CSV格式導入到Excel中,并作出折線圖如下圖中所示的“系列1”線條:
拷貝的目標目錄中共有324個文件,單個文件大小介于1MB與2MB之間,總文件大小549MB,與上面大小為878.16MB的單個文件相比,拷貝的時間要比之前要長,因為文件數(shù)眾多,需要逐個進行拷貝花費了比較長的時間,而且經(jīng)過多次試驗實驗當中是會有誤差的,歸一化后如圖中黃色的“線性(系列1)”線條所示,能夠看到同樣的文件組在使用不同的線程時拷貝速度是有差異的,隨著線程數(shù)的增多,拷貝的時間呈線性的減少。
其實 robocopy 還有很多強大的使用方法,讀者可以使用 robocopy /? 命令進行查詢,或者從本文末尾的附件中查看 RoboCopy 命令的詳細選項,從中讀者將會發(fā)現(xiàn)這條命令更強大的功能選項。
附:RoboCopy 命令的詳細選項
復制選項
/S:復制子目錄,但不復制空的子目錄。
/E:復制子目錄,包括空的子目錄。
/LEV:n:僅復制源目錄樹的前 n 層。
/Z:在可重新啟動模式下復制文件。
/B:在備份模式下復制文件。
/ZB:使用可重新啟動模式;如果拒絕訪問,請使用備份模式。
/EFSRAW:在 EFS RAW 模式下復制所有加密的文件。
/COPY:復制標記:: 要復制的文件內(nèi)容(默認為 /COPY:DAT)。(復制標記: D=數(shù)據(jù),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:僅創(chuàng)建目錄樹和長度為零的文件。
/FAT:僅使用 8.3 FAT 文件名創(chuàng)建目標文件。
/256:關閉超長路徑(> 256 字符)支持。
/MON:n:監(jiān)視源;發(fā)現(xiàn)多于 n 個更改時再次運行。
/MOT:m:監(jiān)視源;如果更改,在 m 分鐘時間內(nèi)再次運行。
/RH:hhmm-hhmm:運行小時數(shù) - 可以啟動新副本的時間。
/PF:以每個文件(而不是每個步驟)為基礎檢查運行小時數(shù)。
/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:包含已調(diào)整的文件。
/MAX:n:最大的文件大小 - 排除大于 n 字節(jié)的文件。
/MIN:n:最小的文件大小 - 排除小于 n 字節(jié)的文件。
/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:失敗副本的重試次數(shù): 默認為 1 百萬。
/W:n:兩次重試間的等待時間: 默認為 30 秒。
/REG:將注冊表中的 /R:n 和 /W:n 保存為默認設置。
/TBD:等待定義共享名稱(重試錯誤 67)。
日志記錄選項
/L:僅列出 - 不復制、添加時間戳或刪除任何文件。
/X:報告所有多余的文件,而不只是選中的文件。
/V:生成詳細輸出,同時顯示跳過的文件。
/TS:在輸出中包含源文件的時間戳。
/FP:在輸出中包含文件的完整路徑名稱。
/BYTES:以字節(jié)打印大小。
/NS:無大小 - 不記錄文件大小。
/NC:無類別 - 不記錄文件類別。
/NFL:無文件列表 - 不記錄文件名。
/NDL:無目錄列表 - 不記錄目錄名稱。
/NP:無進度 - 不顯示已復制的百分比。
/ETA:顯示復制文件的預期到達時間。
/LOG:文件:將狀態(tài)輸出到日志文件(覆蓋現(xiàn)有日志)。
/LOG+:文件:將狀態(tài)輸出到日志文件(附加到現(xiàn)有日志中)。
/UNILOG:文件:以 UNICODE 方式將狀態(tài)輸出到日志文件(覆蓋現(xiàn)有日志)。
/UNILOG+:文件:以 UNICODE 方式將狀態(tài)輸出到日志文件(附加到現(xiàn)有日志中)。
/TEE:輸出到控制臺窗口和日志文件。
/NJS:沒有作業(yè)摘要。
/UNICODE:以 UNICODE 方式輸出狀態(tài)。
作業(yè)選項
/JOB:作業(yè)名稱:從命名的作業(yè)文件中提取參數(shù)。
/SAVE:作業(yè)名稱:將參數(shù)保存到命名的作業(yè)文件。
/QUIT:處理命令行后退出(以查看參數(shù))。
/NOSD:未指定源目錄。
/NODD:未指定目標目錄。
/IF:包含以下文件。