我正在使用Robocopy从源到目标。
下面将移动所有文件。
Step 1: robocopy c:\Source C:\Destination /MIR
现在当我逐步执行第二个命令时,应使用/ MIR参数将2019年1月1日之前的任何内容从目标位置删除,但是不会发生(2019年1月之后的文件仍保留在文件夹中,而不是使用/ MIR命令删除)。我该如何解决这个问题?在20190101之前删除任何内容?
Step 2: robocopy c:\Source C:\Destination /MIR /maxage:19000101 /minage:20190101"
最佳答案
这的确似乎有些奇怪,因为您可能会想使用/MINAGE
开关来选择2019年1月1日以下的所有内容。然后将其与/MIR
开关(或更具体地说是/PURGE /E
开关)结合使用,以删除多余的文件并后于2019年1月1日之后为的目录。
这样做不起作用的原因是,即使/MINAGE
命令按预期工作时,/MIR
开关仅影响选择为复制的文件。
假设我们有2个文件,比2019年1月1日早1个,另外1个新。C:\Source C:\Destination
File-2018.txt
File-2019.txt
当我们运行标准\MIR
命令时:Robocopy.exe C:\Source C:\Destination /MIR
两个文件都按预期方式被复制。2 files Copied
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
如果我们向目标添加一个额外的文件:C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
File-2020.txt
并重新运行/MIR
命令:Robocopy.exe C:\Source C:\Destination /MIR
如预期的那样,我们将删除多余的文件:2 files Skipped
1 files Extras
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
在\MIR
命令中,当我们随后添加/MINAGE
参数时,以为我们要求保留2019年1月1日及更早的一切,其余的则继续:Robocopy.exe C:\Source C:\Destination /MIR /MINAGE:20190101
我们得到意想不到的:2 files Skipped
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
为了更好地说明发生了什么,以及为什么“跳过”文件,我们添加另一个参数Include Skipped \IS
:Robocopy.exe C:\Source C:\Destination /MIR /IS /MINAGE:20190101
我们得到:1 files Copied
1 files Skipped
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
这意味着\MINAGE
参数仅过滤出我们想要复制的内容。如果我们重置并清除目录,然后重新运行它,我们可以更好地了解发生了什么:Remove-Item C:\Destination -Force
C:\Source C:\Destination
File-2018.txt
File-2019.txt
Robocopy.exe C:\Source C:\Destination /MIR /MINAGE:20190101
我们得到:1 files Copied
1 files Skipped
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt
它复制了较旧的文件,而不是较新的文件。这意味着,当遍历源代码中的文件时,它使用/MINAGE
参数仅找出需要将复制到的文件,而不是找出需要删除的文件。
出现这种现象的原因是因为/MINAGE
和相应的/MAXAGE
参数适用于网络链接速度较慢的大型目录或较小的目标计算机,在这些目录中,我们通常仅对某些文件集感兴趣(例如,仅复制昨天的新文件),并且不一定需要复制所有文件。在大多数情况下,通常不执行或不需要镜像,因为文件集通常是“增量”。
为了突出显示复制而不是删除,如果镜像目录,然后我们向目标添加两个额外的文件,一个较旧,一个较新:C:\Source C:\Destination
File-2017.txt
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
File-2020.txt
然后使用“包含跳过的/IS
”重新运行,以便我们可以看到正在复制的内容:Robocopy.exe C:\Source C:\Destination /MIR /IS /MINAGE:20190101
我们得到一些惊奇:1 files Copied
1 files Skipped
2 files Extras
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt
这突显了/MIR
的目的是...很好...镜像。其他参数仅用于告诉将转换为复制。
我们从副本中涉及的源文件开始:C:\Source
File-2018.txt
File-2019.txt
我们通过包括跳过的/IS
和/MINAGE
应用过滤:C:\Source
File-2018.txt <- 1 files Copied
File-2019.txt <- 1 files Skipped
然后执行\MIR
Mirror命令,并从目标中删除源文件中未包括的所有 的文件:C:\Destination
File-2017.txt <- 2 files Extra
File-2020.txt
不论附加文件的年龄如何,
简单的解决方案是不复制所有内容。从一个空目录开始,仅复制早于2019年1月1日的文件:Remove-Item C:\Destination -Force
Robocopy.exe C:\Source C:\Destination /E /MINAGE:20190101
关于powershell - 具有Mir参数的Robocopy最大量距,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56435403/