解決方案:
建議如果你要拷貝包含多個大容量文件的目錄,那就需要使用 RoboCopy 命令了,它是一個命令行的目錄復制命令,自從 Windows NT 4.0 開始就成為 windows 資源工具包的一部分,然後在 Windows Vista、Windows 7 和 Windows Server 2008 采用作為標准的功能內置,這個工具不僅復制速度非常快,而且支持斷點續傳,甚至可以支持在制定的時間定時進行拷貝。Windows 7 中的此項功能也得到升級?D?D已經可以支持多線程了,這就意味著可以大大提升復制速度。而且該功能可以創建兩個文件結構完全的鏡像副本而不復制任何不需要的重復文件,同時還允許您保留所有相關文件信息,包括日期和時間戳、安全訪問控制列表(ACL))等等。對那種N多小文件目錄的復制能把速度提高一個數量級 ,幾千個文件3秒就復制完了,而常用的復制粘貼方式大概需要45秒。
如: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秒得時間。
建議為了能夠測試在選取多少線程數可以更快速的拷貝文件,采用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}
將腳本輸出的內容經過格式規整,通過CSV格式導入到Excel中,並作出折線圖如下圖中所示的“系列1”線條:
拷貝的目標目錄中共有324個文件,單個文件大小介於1MB與2MB之間,總文件大小549MB,與上面大小為878.16MB的單個文件相比,拷貝的時間要比之前要長,因為文件數眾多,需要逐個進行拷貝花費了比較長的時間,而且經過多次試驗實驗當中是會有誤差的,歸一化後如圖中黃色的“線性(系列1)”線條所示,能夠看到同樣的文件組在使用不同的線程時拷貝速度是有差異的,隨著線程數的增多,拷貝的時間呈線性的減少。
其實 robocopy 還有很多強大的使用方法,讀者可以使用 robocopy /? 命令進行查詢,或者從本文末尾的附件中查看 RoboCopy 命令的詳細選項,從中讀者將會發現這條命令更強大的功能選項。