我有一个大约每月运行一次的过程。该过程识别一组文件,并从数据库中不同表的多个字段构建适当的源路径和目标路径,然后复制所有这些文件,因此我最终可能会得到数十万或数百万条路径。这些路径可能指向以前被复制过但已被修改的文件。
我怎样才能以最快的方式完成这个复制?
我首先尝试了一个简单的大型 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 开销。