1 powershell command-line robocopy powershell-4.0
我正在使用从源到目标的 Robocopy。
以下将移动所有文件。
Step 1: robocopy c:\Source C:\Destination /MIR
Run Code Online (Sandbox Code Playgroud)
现在,当我逐步执行第二个命令时,应该使用 /MIR 参数从目标中删除 2019 年 1 月 1 日之前的任何内容,但是这不会发生(2019 年 1 月之后的文件仍保留在文件夹中,而不是使用 /MIR 命令删除)。我将如何解决这个问题?在 20190101 之前删除任何东西?
Step 2: robocopy c:\Source C:\Destination /MIR /maxage:19000101 /minage:20190101"
Run Code Online (Sandbox Code Playgroud)
这确实看起来很奇怪,因为人们会认为您尝试使用/MINAGE
开关来选择 2019 年 1 月 1 日之前的所有内容。然后将其与/MIR
开关结合,或更具体地说是/PURGE /E
开关,以删除额外的文件和目录2019 年 1 月 1 日之后。
这不起作用的原因是该/MINAGE
开关仅影响选择 复制的文件,即使该/MIR
命令按预期工作。
假设我们有 2 个文件 1 早于 2019 年 1 月 1 日,一个较新。
C:\Source C:\Destination
File-2018.txt
File-2019.txt
Run Code Online (Sandbox Code Playgroud)
当我们运行标准\MIR
命令时:
Robocopy.exe C:\Source C:\Destination /MIR
Run Code Online (Sandbox Code Playgroud)
这两个文件都按预期复制。
2 files Copied
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
Run Code Online (Sandbox Code Playgroud)
如果我们向目的地添加一个额外的文件:
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
File-2020.txt
Run Code Online (Sandbox Code Playgroud)
并重新运行/MIR
命令:
Robocopy.exe C:\Source C:\Destination /MIR
Run Code Online (Sandbox Code Playgroud)
我们得到了,正如预期的那样,额外的文件被删除了:
2 files Skipped
1 files Extras
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
Run Code Online (Sandbox Code Playgroud)
在\MIR
命令中,当我们添加一个/MINAGE
参数时,我们认为我们要求 2019 年 1 月 1 日及之前的所有内容保留,其余部分保留:
Robocopy.exe C:\Source C:\Destination /MIR /MINAGE:20190101
Run Code Online (Sandbox Code Playgroud)
我们得到了意想不到的:
2 files Skipped
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
Run Code Online (Sandbox Code Playgroud)
为了更好地说明发生了什么,以及为什么它“跳过”了文件,让我们添加另一个参数,包括跳过\IS
:
Robocopy.exe C:\Source C:\Destination /MIR /IS /MINAGE:20190101
Run Code Online (Sandbox Code Playgroud)
我们得到:
1 files Copied
1 files Skipped
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
Run Code Online (Sandbox Code Playgroud)
这意味着\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
Run Code Online (Sandbox Code Playgroud)
我们得到:
1 files Copied
1 files Skipped
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt
Run Code Online (Sandbox Code Playgroud)
它复制了旧文件,而不是新文件。当它通过文件源迭代,这意味着,它使用的/MINAGE
参数找出只有哪些文件,我需要复制过来,没有什么文件,我需要删除。
这种行为的原因是因为/MINAGE
并且相应的/MAXAGE
参数适用于具有慢速网络链接或较小目标计算机的非常大的目录,我们通常只对复制某些文件集(例如仅昨天的新文件)感兴趣,并且不要'不一定需要复制所有文件。大多数情况下,在这些情况下,通常不会执行或不需要镜像,因为文件集通常是“增量”。
为了突出显示复制而不是删除,如果镜像目录,然后我们添加 2 个额外的文件,一个旧的和一个新的到Destination:
C:\Source C:\Destination
File-2017.txt
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
File-2020.txt
Run Code Online (Sandbox Code Playgroud)
并使用 Include Skipped 重新运行,/IS
以便我们可以看到正在复制的内容:
Robocopy.exe C:\Source C:\Destination /MIR /IS /MINAGE:20190101
Run Code Online (Sandbox Code Playgroud)
我们得到了一些令人惊讶的:
1 files Copied
1 files Skipped
2 files Extras
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
Run Code Online (Sandbox Code Playgroud)
这个突出显示/MIR
是为了......好吧......镜像。其他参数是那里才告诉它什么来复制。
我们从副本中涉及的源文件开始:
C:\Source
File-2018.txt
File-2019.txt
Run Code Online (Sandbox Code Playgroud)
我们通过 Include skipped/IS
和应用过滤/MINAGE
:
C:\Source
File-2018.txt <- 1 files Copied
File-2019.txt <- 1 files Skipped
Run Code Online (Sandbox Code Playgroud)
然后\MIR
Mirror 命令执行并从 Destination 中删除所有 未包含在 Source Files 中的文件:
C:\Destination
File-2017.txt <- 2 files Extra
File-2020.txt
Run Code Online (Sandbox Code Playgroud)
无论额外文件的年龄
简单的解决方案是从一开始就不要复制所有内容。从一个空目录开始,只复制 2019 年 1 月 1 日之前的文件:
Remove-Item C:\Destination -Force
Robocopy.exe C:\Source C:\Destination /E /MINAGE:20190101
Run Code Online (Sandbox Code Playgroud)
编辑
改进的方法(而不是先删除整个目录),您只需在目标上运行清理脚本,首先从目标中删除早于 2019 年 1 月 1 日的项目:
#Cleanup younger files
Get-ChildItem C:\Destination -Recurse | Where { $_.LastWriteTime -gt (Get-Date '2019-01-01')} | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
#Mirror over new files
Robocopy.exe C:\Source C:\Destination /MIR /MINAGE:20190101
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3898 次 |
最近记录: |