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