【问题标题】:Compare folders and delete duplicates比较文件夹并删除重复项
【发布时间】:2020-04-12 04:55:09
【问题描述】:

我的 R Drive 上有一个文件夹(日期为昨天),用于存放每天的报告。

这些内容每天早上从我们的 J Drive 复制过来,只有部分人可以访问。我使用 PowerShell 进行复制,但对它还很陌生,所以一直不敢使用 MOVE 而不是 COPY,也不敢从 J Drive 中删除原件。因此,我在确保复制成功后手动执行此操作。

我要做的是:在R Drive文件夹中找到所有文件(它们是txt和ZIP),这些文件也存在于J Drive上,如果它们的大小相同,请删除J Drive上的文件。

这样做的最佳方法是什么?我宁愿不单独处理每个文件。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    为了回答你的问题,这里有一个我过去做过类似事情的例子:

    $one = Get-ChildItem C:\temp\test1
    $two = Get-ChildItem C:\temp\test2
    
    $matches = (Compare-Object -ReferenceObject $one  -DifferenceObject $two -Property Name,Length -ExcludeDifferent -IncludeEqual)
    
    foreach ($file in $matches)
    {
        Remove-Item c:\temp\test2\$($file.Name)
    }
    

    我怀疑您可能想为此添加一些日志记录,如果您是极度紧张的类型,甚至可能会提示删除。 :)

    【讨论】:

      【解决方案2】:

      只需使用 MOVE。它和使用副本一样安全。

      【讨论】:

      • 一些 ZIP 为 2GB+。进行移动时存在断电等风险。我知道我的请求可能不合理,但我想复制,然后在一天结束时为 J Drive 准备一个清理脚本。我不想移动文件。
      • Move 在文件传输成功之前不会删除文件。
      • 当然只有一个,或者只有两个副本也是蛮干的。您必须在其他地方有一两个备份。
      • 我会记住这一点 - 很高兴知道,谢谢。我的问题仍然是一样的——我想要一个清理脚本,我将在一天结束时运行它。这里还有其他因素,为什么我不想在复制/移动后立即删除原件。
      • 为什么不使用 ROBOCOPY 或 XXCOPY?任何一个都可以满足您的需要。
      【解决方案3】:

      如果您将它们全部复制到同一个文件夹,则 windows 会希望在 dup 文件的末尾放置一个 (1)(如果它们具有相同的名称) 然后你可以运行

      Get-ChildItem 'C:\Your\Path*(1)*' |删除项目

      只是为我工作

      【讨论】:

        猜你喜欢
        • 2015-07-15
        • 2021-12-08
        • 2014-12-16
        • 2017-12-31
        • 1970-01-01
        • 1970-01-01
        • 2013-02-02
        • 2020-12-14
        相关资源
        最近更新 更多