powershell - 具有Mir参数的Robocopy最大量距

标签 powershell command-line powershell-4.0 robocopy

我正在使用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/

相关文章:

windows - 列出占用最多 CPU 时间的进程。(Powershell)

ios - 从命令行+ iOS应用程序时,错误的无效体系结构“arm”

c# - 我可以在我托管的 PowerShell 中创建变量并启动我的类的方法吗?

powershell - 在 powershell 中添加第二行

powershell - 根据 FileName 将分割 FileName 的一部分写入 doc

linux - 在 linux 中创建可执行程序的路径时遇到问题

Maven Enforcer 插件 : Specify rules via command line

loops - 如何打破 Powershell 中的 Foreach 循环?

powershell - 如何区分未设置参数与 $false、0、空字符串?

azure - 如何检查哪个Azure资源正在使用特定的IP地址?