我正在尝试编写一个脚本,该脚本从桌面删除重复的快捷方式。 我正在尝试通过过滤* .lnk文件(在方括号中包含数字)来查找重复项。
我设法使其能够正常工作,但不够可靠。 我对包含方括号的名称进行过滤,例如:
Get-ChildItem '.\Desktop\*.lnk' -Filter "*(*)*"
这有效,但也包括带有字符或几乎所有内容的方括号。如何使过滤器仅查找带有数字的括号?例如(1),(232352),...
Get-ChildItem '.\Desktop\*.lnk' -Filter "*(\d+)*"
这是我尝试过的方法,对我不起作用。
答案 0 :(得分:2)
如有疑问,请阅读documentation:
-Filter
指定一个过滤器以限定Path参数。 FileSystem提供程序是唯一安装的支持过滤器使用的PowerShell提供程序。筛选器比其他参数更有效,因为提供程序在cmdlet获取对象时应用它们,而不是让PowerShell在检索对象后对其进行筛选。筛选器字符串将传递到.NET API以枚举文件。该API仅支持
*
和?
通配符。
参数-Filter
仅支持通配符匹配。如果需要正则表达式匹配,则需要使用后续的Where-Object
过滤器。
Get-ChildItem '.\Desktop\*.lnk' | Where-Object { $_.Name -match '\(\d+\)' }
您还可以使用Get-ChildItem
预先过滤带有括号的文件名,然后使用Where-Object
过滤器将结果限制为所需的子集(当您必须处理较大的文件名时可能会提供更好的性能文件数):
Get-ChildItem '.\Desktop\*.lnk' -Filter "*(*)*" |
Where-Object { $_.Name -match '\(\d+\)' }