You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于哈希查找重复文件,保留Live Photos关联MOV文件的PowerShell脚本需求

基于哈希去重并保留Live Photo关联图片的PowerShell实现

完整脚本

# 替换为你的实际照片库路径
$photoPath = "C:\Your\Photo\Library\Path"

# 遍历所有JPG,计算哈希并检查是否有同名MOV
$jpgFiles = Get-ChildItem -Path $photoPath -Filter "*.jpg" -Recurse | ForEach-Object {
    [PSCustomObject]@{
        Path = $_.FullName
        Hash = (Get-FileHash -Path $_.FullName -Algorithm SHA256).Hash
        HasMatchingMOV = Test-Path -Path "$($_.DirectoryName)\$($_.BaseName).mov"
    }
}

# 按哈希分组处理重复项
foreach ($group in $jpgFiles | Group-Object -Property Hash) {
    if ($group.Count -gt 1) {
        # 筛选出带对应MOV的图片
        $keepFiles = $group.Group | Where-Object { $_.HasMatchingMOV }
        
        if ($keepFiles.Count -gt 0) {
            # 保留第一个带MOV的,删其他同哈希文件
            $toDelete = $group.Group | Where-Object { $_.Path -ne $keepFiles[0].Path }
        } else {
            # 无MOV的重复组,保留第一个,删剩下的
            $toDelete = $group.Group | Select-Object -Skip 1
        }

        # 先预览要删除的文件(-WhatIf仅打印操作,确认无误后去掉该参数)
        $toDelete | Remove-Item -Force -WhatIf
    }
}

关键逻辑说明

  • 哈希校验:用SHA256哈希值判定图片内容是否重复,彻底解决文件名不同但内容一致的重复识别问题。
  • Live Photo检测:自动检查同目录下是否存在与JPG同名的.MOV文件,标记为优先保留对象。
  • 重复项处理规则:
    1. 同一哈希组内有带MOV的图片时,仅保留第一个符合条件的文件,删除其余同哈希文件。
    2. 无对应MOV的重复组,默认保留最先遍历到的文件,删除剩余重复项。
  • 安全机制:默认启用-WhatIf参数,运行时只会输出待删除文件路径,不会实际执行删除操作。确认列表无误后,再移除该参数执行真实删除。

注意事项

  • 操作前务必备份照片库,避免意外损失。
  • 若你的MOV文件为大写后缀(.MOV),给Test-Path添加-CaseSensitive参数即可匹配。
  • 如需更快的哈希计算速度,可将Get-FileHash中的SHA256替换为MD5,但SHA256的哈希碰撞概率更低,安全性更高。

内容的提问来源于stack exchange,提问作者user29012922

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 05:13:16