string - 删除包含特定字符串的重复快捷方式

标签 string powershell

我们有很多用户的桌面上有重复的文件 (Windows 10)。我想创建一个每 X 分钟运行一次或登录系统后运行一次的脚本。

我们的用户当前看到以下快捷方式 (.lnk):

  • Dummy.lnk (正确的快捷方式,应保持不变)
  • 虚拟 - copy.lnk (重复的快捷方式,应删除)
  • Dummy-OFFICE-QB4V70A.lnk (包含计算机名称的重复快捷方式,应删除)

所以简而言之,我想保留“原始”快捷方式,但我想删除所有包含“- copy.lnk”和/或“-computername”的快捷方式。 lnk'。

我还尝试使用 %computername% 变量,但我不知道如何在我的代码中实现它。每台计算机都有不同且唯一的名称,因此我无法使用预定义的计算机名称。

关于如何实现这一目标有什么建议吗?我尝试使用下面的代码,但这会删除所有 .lnk(快捷方式)文件,而不仅仅是重复的文件。

#(Get-ChildItem Dummy.lnk | Select-String -Pattern "OFFICE" | Select-Object -ExpandProperty path -Unique) | ForEach-Object{Remove-Item -Force -LiteralPath $_}

我更喜欢使用 Powershell,这样我就可以使用组策略部署脚本。

最佳答案

我将使用 Where-Object cmdlet 来过滤要删除的所有快捷方式,并将它们通过管道传输到 Remove-Item cmdlet:

Get-ChildItem -Path 'c:\yourPath' -Filter '*.lnk' | 
    Where-Object { $_.Name -match '- Copy\.lnk$' -or $_.Name -like "*$($env:Computername)*"} |
    Remove-Item

关于string - 删除包含特定字符串的重复快捷方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59301812/

相关文章:

c - C 中的字符串切片和复制

c# - 当字符串中有反斜杠时,IndexOf 失败——为什么?

powershell - 是否可以从 PowerShell 打开 Windows 资源管理器窗口?

PowerShell 和 WinSCP 脚本检查 SFTP 远程目录中是否有超过 4 个文件

c# - PowerShell 未在 SqlConnectionStringBuilder 上设置属性(适用于 C#)

powershell - $MyInvocation.MyCommand.Path 返回 NULL

c# - 为什么空字符串不是字符串对象

c - 使用转义键进行字符串操作

c# - 如何将 string.join 添加到 foreach 循环

适用于 ServiceNow 的 Powershell SOAP