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

如何用PowerShell ISE递归遍历目录删除重复旧文件并保留最新版

PowerShell脚本:递归删除同名重复文件并保留最新版本

以下是可实现需求的脚本,附带详细说明和安全测试建议:

# 替换为你需要处理的目标目录路径
$targetDir = "C:\Your\Target\Folder"

# 核心执行逻辑:递归取文件→按文件名分组→过滤重复组→保留最新删除其余
Get-ChildItem -Path $targetDir -File -Recurse | 
    Group-Object -Property Name |
    Where-Object { $_.Count -gt 1 } |
    ForEach-Object {
        # 按修改时间倒序排序,第一个即为最新文件
        $latestFile = $_.Group | Sort-Object LastWriteTime -Descending | Select-Object -First 1
        # 筛选出组内除最新文件外的所有旧文件
        $filesToDelete = $_.Group | Where-Object { $_.FullName -ne $latestFile.FullName }

        # 先输出待删除文件信息,确认无误后再执行删除
        foreach ($file in $filesToDelete) {
            Write-Host "待删除旧文件: $($file.FullName) | 修改时间: $($file.LastWriteTime)"
            # 实际删除时去掉下面的注释,先保留-WhatIf参数做模拟测试
            # Remove-Item -Path $file.FullName -Force -WhatIf
        }
    }

关键细节说明

  1. 递归遍历:-Recurse参数确保覆盖所有子文件夹,-File仅处理文件,排除文件夹干扰
  2. 同名分组:Group-Object Name将所有同名文件归为一组,便于批量处理重复项
  3. 过滤重复组:只处理文件数量大于1的组,避免对无重复的单文件做无效操作
  4. 判定最新文件:通过倒序排序修改时间,直接取第一个结果即为最新版本文件
  5. 安全机制:脚本默认仅输出待删除文件信息,-WhatIf参数可模拟删除操作,确认无误后再去掉注释执行实际删除

自定义调整选项

  • 若要按创建时间判断文件新旧,将LastWriteTime替换为CreationTime
  • 若需忽略扩展名(例如report.txt和report.pdf视为同名),将Group-Object -Property Name修改为:
    Group-Object -Property { [System.IO.Path]::GetFileNameWithoutExtension($_.Name) }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:36:15