gpt4 book ai didi

regex - 如何使用 -Filter(使用正则表达式)?

转载 作者:行者123 更新时间:2023-12-02 23:18:59 25 4
gpt4 key购买 nike

我正在尝试编写一个从桌面删除重复快捷方式的脚本。
我试图通过过滤包含括号中的数字的 *.lnk 文件来查找重复项。

我已经设法让它工作了,但不像我想要的那样可靠。
我让它过滤包含括号的名称,其中包含任何内容,如下所示:

Get-ChildItem '.\Desktop\*.lnk' -Filter "*(*)*"

这可行,但也包括带有字符的括号或其中几乎任何内容。如何使过滤器仅查找带数字的括号?例如(1), (232352),...
Get-ChildItem '.\Desktop\*.lnk' -Filter "*(\d+)*"

这是我尝试过的,它对我不起作用。

最佳答案

如有疑问,请阅读 documentation :

-Filter

Specifies a filter to qualify the Path parameter. The FileSystem provider is the only installed PowerShell provider that supports the use of filters. Filters are more efficient than other parameters, because the provider applies them when the cmdlet gets the objects rather than having PowerShell filter the objects after they are retrieved. The filter string is passed to the .NET API to enumerate files. That API only supports * and ? wildcards.



参数 -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+\)' }

关于regex - 如何使用 -Filter(使用正则表达式)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57163432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com