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
相关产品推荐
相关产品推荐

