
我有一個大約每月運行一次的流程。這樣的過程會識別一組文件,並從資料庫中不同表的多個欄位建立正確的來源路徑和目標路徑,然後複製所有這些文件,因此我最終可能會得到數十萬或數百萬條路徑。這些路徑可能指向先前已複製但已修改的檔案。
如何以最快的方式執行此複製?
我首先嘗試了一個簡單的大型 cmd 腳本,檢查每個結果路徑中的檔案是否存在於目標路徑中,然後嘗試複製(如果不存在),但修改的檔案被跳過。因此,然後我嘗試使用“xcopy”來避免在日期相同時覆蓋,通過使用 /D 開關和 /Y 開關默默地確認提示,但實際上,一個包含數十萬個 xcopy 命令的巨大腳本需要永遠,當這些文件中的一些或大部分已經存在相同的日期時,我沒有看到任何加速。您有什麼想法可以幫助我嗎?我可以如何處理包含數百個來源路徑和目標路徑的檔案來製作所有這些路徑的副本?有沒有比 xcopy 更快的替代方案?或者更快的日期檢查然後調用任何複製命令?
關於我目前如何根據資料庫資訊獲取和複製文件的更詳細解釋:資料庫中有多個表:
表 1:ID、Dir_Name、...
表 2:ID、Dir_Name、...
…
表 N:ID、Dir_Name、...
來源資料夾路徑表:Dir_Name、Dir_FullPath
目標資料夾路徑表:Dir_Name、Dir_FullPath
然後我可以創建一組複製命令(或只是獲取來源路徑和目標路徑)
Select 'xcopy /d /y '|| T2.Dir_FullPath || '\\' || ID || '.ext ' || T3.Dir_FullPath || '\\' || ID || '.ext*'
from Table1 T1
left join SourceFolderPathsTable T2 on T1.Dir_Name=T2.Dir_Name
left join DestFolderPathsTable T3 T1.Dir_Name=T3.Dir_Name where T1.some_criteria=true;
謝謝你!
答案1
看一下Windows自帶的命令列工具「robocopy」。我相信它可以接受響應文件,並且它已經可以被告知僅更新已更改日期/時間的文件,而且它的速度大約是最快的,是純命令行,沒有 GUI 開銷。