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

PowerShell脚本优化:删除桌面带递增数字的重复快捷方式

优化PowerShell脚本删除OneDrive商业版桌面的重复快捷方式

现有PowerShell脚本可清除OneDrive商业版桌面路径下大部分重复快捷方式,但无法处理文件名末尾带递增数字(如(1)、(2))的重复项,例如AR Reader.url(1)、AR Reader.url(2)这类文件,有时这类重复文件数量多达上百个。以下是当前使用的脚本:

$cache = Get-ChildItem $env:OneDriveCommercial\Desktop
if ($cache) {
    $cache | Where {(($_.Name -like "*.lnk") -or ($_.Name -like "*.url")) -and ($_.Name -like "*- Copy*")} | Remove-Item -Force
    $cache | Where {(($_.Name -like "*.lnk") -or ($_.Name -like "*.url")) -and ($_.Name -like "*-WAV-D-*")} | Remove-Item -Force
    $cache | Where {(($_.Name -like "*.lnk") -or ($_.Name -like "*.url")) -and ($_.Name -like "*-WAV-L-*")} | Remove-Item -Force
    $cache | Where {(($_.Name -like "*.lnk") -or ($_.Name -like "*.url")) -and ($_.Name -like "*-WSC-L-*")} | Remove-Item -Force
    $cache | Where {(($_.Name -like "*.lnk") -or ($_.Name -like "*.url")) -and ($_.Name -like "*-WSC-D-*")} | Remove-Item -Force
    $cache | Where {(($_.Name -like "*.lnk") -or ($_.Name -like "*.url")) -and ($_.Name -like "*Shortcut*")} | Remove-Item -Force
} else {
    exit 0
}

优化后的脚本

$desktopPath = "$env:OneDriveCommercial\Desktop"
$shortcuts = Get-ChildItem -Path $desktopPath -Include *.lnk,*.url -File

if (-not $shortcuts) { exit 0 }

# 处理原有规则的重复项
$originalFilters = @(
    "*- Copy*",
    "*-WAV-D-*",
    "*-WAV-L-*",
    "*-WSC-L-*",
    "*-WSC-D-*",
    "*Shortcut*"
)

$shortcuts | Where-Object {
    $name = $_.Name
    $originalFilters | ForEach-Object { $name -like $_ }
} | Remove-Item -Force

# 处理末尾带(1)、(2)等递增数字的重复项
$shortcutGroups = $shortcuts | Group-Object -Property {
    # 提取原始文件名(去掉末尾的(n)后缀)
    if ($_.BaseName -match '^(.*?)\(\d+\)$') {
        $matches[1] + $_.Extension
    } else {
        $_.Name
    }
}

foreach ($group in $shortcutGroups) {
    # 跳过只有单个文件的组
    if ($group.Count -le 1) { continue }

    # 找到原始文件(不带(n)后缀的)
    $originalFile = $group.Group | Where-Object {
        $_.BaseName -notmatch '\(\d+\)$'
    }

    if ($originalFile) {
        # 删除组内除原始文件外的所有副本
        $group.Group | Where-Object { $_ -ne $originalFile } | Remove-Item -Force
    } else {
        # 若没有原始文件,保留编号最小的副本,删除其余
        $sortedCopies = $group.Group | Sort-Object {
            if ($_.BaseName -match '\((\d+)\)$') { [int]$matches[1] }
        }
        $sortedCopies | Select-Object -Skip 1 | Remove-Item -Force
    }
}

关键优化点说明

  • 整合原有过滤规则:把分散的条件合并到数组中,代码更简洁易维护。
  • 正则匹配数字后缀:用^(.*?)\(\d+\)$识别(n)格式的后缀,将同原始文件的副本归为一组。
  • 智能保留文件:优先保留不带(n)后缀的原始文件;若所有文件都带后缀,则保留编号最小的文件。
  • 精准筛选文件:提前指定.lnk和.url后缀,避免处理无关文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 20:12:49