為什麼沒辦法在Windows7下加快Windows7中文件復制/傳輸功能呢?可以用robocopy實現多線程文件復制實現。
經常進行文件管理操作的朋友們,提到復制/粘貼操作,想必很多人還會回想起當初Vista奇慢的復制速度,不滿意於Windows系統內置的復制功能,因為它太龜速了。於是大家就使用FastCopy、TeraCopy之類的軟件來加速復制,Windows7隨後則是修復了這一問題,但效果似乎也不理想,但是你是否知道Windows7已經內置快速復制的功能?
解決方案:
建議如果你要拷貝包含多個大容量文件的目錄,那就需要使用RoboCopy命令了,它是一個命令行的目錄復制命令,自從WindowsNT4.0開始就成為windows資源工具包的一部分,然後在WindowsVista、Windows7和WindowsServer2008采用作為標准的功能內置,這個工具不僅復制速度非常快,而且支持斷點續傳,甚至可以支持在制定的時間定時進行拷貝。Windows7中的此項功能也得到升級?D?D已經可以支持多線程了,這就意味著可以大大提升復制速度。而且該功能可以創建兩個文件結構完全的鏡像副本而不復制任何不需要的重復文件,同時還允許您保留所有相關文件信息,包括日期和時間戳、安全訪問控制列表(ACL))等等。對那種N多小文件目錄的復制能把速度提高一個數量級,幾千個文件3秒就復制完了,而常用的復制粘貼方式大概需要45秒。
例如要把光盤F://裡的所有文件拷貝到E盤的//CD目錄下,可以運行以下命令:
Robocopy/sF://E://CD
即使此時突然取出光盤,也無妨,robocopy會一直等待,直到把光盤重新放入光驅又會自動開始拷貝。
Robocopy還支持局域網拷貝,甚至可以把局域網服務器中指定目錄的目錄結構全部搬到本地,robocopy支持在定時操作,就可以把復制的操作放到晚上進行,以免擁塞局域網,給別人帶來不便。
下面先看看這條命令的用法,如下圖所示:
如:RoBoCopydir_fromdir_to/E/MT:50/LOG:copy.log
其中/E表示包含子目錄,/MT:50是用50個線程(默認8個線程,最大可設128個),/LOG是重定向輸出。更多選項可以用robocopy/?查看。
命令語法:ROBOCOPYsourcedestination[file[file]...][options]
源:源目錄(驅動器://路徑或////服務器//共享//路徑)
目標:目標目錄(驅動器://路徑或////服務器//共享//路徑)
文件:要復制的文件(名稱/通配符:默認為"*.*")
為了測試復制文件的速度,做了如下的測試
能夠從上圖中看到在120個線程的情況下,復制大小為878.16MB的單個文件,從14:56:31開始,14:57:06結束,共用了35秒得時間。
建議為了能夠測試在選取多少線程數可以更快速的拷貝文件,采用PowerShell腳本進行批處理逐個測試不同線程的情況下復制所需要的時間與線程的對應關系,並將其在坐標上描點作圖,測試的PowerShell腳本如下:
for($i=128;$i?Clt129;$i++){
Robocopy/sC://CDC://test//CD$i/MT:$i/LOG:log/copy$i.log
remove-itemC:////test//CD$i//*.*
"$i,">>log/answ.txt
(Get-ContentC://log//copy$i.log-TotalCount6)[-1]>>log/answ.txt
",">>log/answ.txt
(Get-ContentC://log//copy$i.log-TotalCount10000)[-1]>>log/answ.txt}
將腳本輸出的內容經過格式規整,通過CSV格式導入到Excel中,並作出折線圖如下圖中所示的“系列1”線條:
拷貝的目標目錄中共有324個文件,單個文件大小介於1MB與2MB之間,總文件大小549MB,與上面大小為878.16MB的單個文件相比,拷貝的時間要比之前要長,因為文件數眾多,需要逐個進行拷貝花費了比較長的時間,而且經過多次試驗實驗當中是會有誤差的,歸一化後如圖中黃色的“線性(系列1)”線條所示,能夠看到同樣的文件組在使用不同的線程時拷貝速度是有差異的,隨著線程數的增多,拷貝的時間呈線性的減少。
其實robocopy還有很多強大的使用方法,讀者可以使用robocopy/?命令進行查詢,或者從本文末尾的附件中查看RoboCopy命令的詳細選項,從中讀者將會發現這條命令更強大的功能選項。