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

如何限制同文件夹内同名(不含扩展名)文件的重复检测并保留小文件

问题修正:PowerShell按目录+文件名分组保留小体积文件

需求

在同一目录下,匹配不含扩展名的文件基础名称,保留体积较小的文件。

目录结构示例

C:\FolderA\WhatzIt.mp3 3mb
C:\FolderA\WhatzIt.opus  5mb
    C:\FolderA\Folder-1A\WhatzIt.wav 7mb
    C:\FolderA\Folder-1A\WhatzIt.mp3 4mb

当前错误分组结果

Duplicate group for 'WhatzIt':

C:\FolderA\WhatzIt.opus
C:\FolderA\Folder-1A\WhatzIt.wav

期望分组结果

Duplicate group for 'WhatzIt':

C:\FolderA\WhatzIt.mp3 3mb
C:\FolderA\WhatzIt.opus  5mb

Duplicate group for 'WhatzIt':

C:\FolderA\Folder-1A\WhatzIt.wav 7mb
C:\FolderA\Folder-1A\WhatzIt.mp3 4mb

修正后的脚本

Remove-Variable * -ErrorAction SilentlyContinue

$directoryPath = "C:\FolderA"

# 获取目标文件,递归遍历但后续按目录分组
$files = Get-ChildItem -Path $directoryPath -File -Recurse -Force -Include *.wav, *.opus, *.mp3

# 关键修正:用完整目录路径+文件基名作为分组键,确保同一目录下的同名文件才会被分组
$groupedFiles = $files | Group-Object { 
    # 组合完整目录路径和文件基名,作为唯一分组标识
    Join-Path -Path $_.Directory.FullName -ChildPath $_.BaseName
}

foreach ($group in $groupedFiles) {
    if ($group.Count -gt 1) {
        # 输出分组信息,带文件大小
        $baseName = $group.Group[0].BaseName
        Write-Host "`nDuplicate group for '$baseName' :"
        foreach ($file in $group.Group) {
            $fileSizeMB = [math]::Round($file.Length / 1MB, 2)
            Write-Host " - $($file.FullName) $fileSizeMB mb"
        }
        Write-Host ""

        # 按文件体积升序排序,保留最小的,删除其余
        $filesToCheck = $group.Group | Sort-Object Length
        $filesToDelete = $filesToCheck[1..($filesToCheck.Count - 1)]

        foreach ($ToDel in $filesToDelete) {
            # 先保留-WhatIf确认删除目标,确认无误后可移除该参数
            Remove-Item -Path $ToDel.FullName -Force -WhatIf
            $delSizeMB = [math]::Round($ToDel.Length / 1MB, 2)
            Write-Host "Deleted larger duplicate file: $($ToDel.FullName) ($delSizeMB mb)"
        }
    }
}

Read-Host -Prompt "Press Enter to exit"

关键修改说明

  • 分组逻辑修正:原脚本的分组块未返回有效标识,现在通过Join-Path组合文件的完整目录路径和基名作为分组键,确保只有同一目录下的同名文件才会被分到一组,不同子目录的同名文件会独立分组。
  • 删除变量修正:原脚本删除时错误引用了外层循环的$file变量,现在改为直接引用当前待删除的$ToDel变量,避免删除错误文件。
  • 补充细节优化:新增文件体积的计算与显示,匹配示例格式;补充了*.mp3文件类型以覆盖示例中的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 00:17:18