Regex PowerShell脚本-无法将值转换为正则表达式

Regex PowerShell脚本-无法将值转换为正则表达式,regex,powershell,Regex,Powershell,编写了一个脚本,用于通过正则表达式将文件从一个文件夹复制到另一个文件夹: param ([string]$dir) $destination = "Q:\OneDrive\nuget-packages" $filter = [regex] "*.nupkg" $bin = Get-ChildItem -Path $dir | Where-Object {$_.Name -match $filter} foreach ($item in $bin) {Copy-Item -Path $it

编写了一个脚本,用于通过正则表达式将文件从一个文件夹复制到另一个文件夹:

param ([string]$dir)

$destination = "Q:\OneDrive\nuget-packages" 
$filter = [regex] "*.nupkg"

$bin = Get-ChildItem -Path $dir | Where-Object {$_.Name -match $filter} 
foreach ($item in $bin) {Copy-Item -Path $item.FullName -Destination $destination}
运行该脚本时,PowerShell表示无法将值“.nupkg”转换为类型,将其转换为类型“System.Text.RegularExpressions.Regex”。错误:“正在分析“.nupkg”-无后面的量词{x,y}。”


我的正则表达式怎么了?

*
不是正则表达式中的通配符,它是一个量词,它定义了前一个标记应该出现的次数

您的
*
前面没有标记,这正是PowerShell所抱怨的(尽管它提到了
{x,y}
,这是另一个更通用的量词;我猜它在引发错误之前将
*
翻译成等价的
{0,}

\.nupkg$
可以执行您想要的操作,匹配以
.nupkg
结尾的任何内容

在这个正则表达式中,我不需要匹配完整的字符串,但是我使用了表示字符串结尾的
$
。我还对
进行转义,以防止它被理解为它在正则表达式中表示的元字符


如果要避免单独匹配
.nupkg
,则必须匹配更多字符串,这可以通过
\.nupkg$
实现,其中
是正则表达式通配符,它将确保在扩展名之前至少有一个字符要匹配。

*
不是正则表达式中的通配符,它是一个量词,它定义了前一个标记应该出现多少次

您的
*
前面没有标记,这正是PowerShell所抱怨的(尽管它提到了
{x,y}
,这是另一个更通用的量词;我猜它在引发错误之前将
*
翻译成等价的
{0,}

\.nupkg$
可以执行您想要的操作,匹配以
.nupkg
结尾的任何内容

在这个正则表达式中,我不需要匹配完整的字符串,但是我使用了表示字符串结尾的
$
。我还对
进行转义,以防止它被理解为它在正则表达式中表示的元字符


如果要避免单独匹配
.nupkg
,则必须匹配更多字符串,这可以通过
\.nupkg$
实现,其中,
是正则表达式通配符,它将确保在扩展之前至少有一个字符要匹配。

老实说,在你的情况下,我会使用-Like而不是-match,那么你可以使用通配符。老实说,在你的情况下,我会使用-Like而不是-match,那么你可以使用通配符。