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

时间:2018-09-24 14:43:40

标签: 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 $item.FullName -Destination $destination}

运行脚本,PowerShell表示无法将值“ .nupkg”转换为键入以键入“ System.Text.RegularExpressions.Regex”。错误:“正在解析“ .nupkg”-量词{x,y}不执行任何操作。“

我的正则表达式怎么了?

1 个答案:

答案 0 :(得分:3)

*在正则表达式中不是通配符,它​​是一个量词,它定义了前一个令牌应出现的次数。

您的*前面没有标记,这是PowerShell抱怨的(尽管它说的是{x,y},这是另一个更通用的量词;我想它将*转换为等效标记{0,},然后再引发错误。

\.nupkg$可能会做您想做的,匹配以.nupkg结尾的任何内容。

在此正则表达式中,我不必理会完整的字符串,但是我使用$来代表字符串的结尾。我也对.进行了转义,以防止它被理解为它在正则表达式中表示的元字符。

如果您想避免单独匹配.nupkg,则必须匹配更多的字符串,您可以使用.+\.nupkg$进行匹配,其中.是正则表达式通配符,{ {1}}是“ 1次或多次”的量词。