我经常需要在驱动器之间复制大量文件,并且该过程经常启动和停止。在 posix shell 中,我可以用来不覆盖现有文件,但在 powershellcp -n
中似乎没有等效的“不覆盖”开关。copy-item
这意味着如果我必须停止并开始我必须使用的过程
ls -Recurse|%{
if (-Not(test-path($_fullname.replace("D:\", "E:\")))){
cp $_.fullname $_.fullname.replace("D:\", "E:\");
}
}
工作正常,但如果我有一百万个文件要复制,有时会发生,我想test-path
每次都必须执行一些开销。
编辑:顺便说一句,我试过robocopy.exe d:\thedir e:\thedir /XN /XO /S
了,但是扫描已经存在的文件需要很长时间。如果我使用上面的脚本并且我已经完成了一个大型会话,那么在它开始复制新文件之前会有几秒钟的暂停;使用 robocopy 时,它甚至在开始复制之前就花了几分钟的时间浏览已经复制的文件。