首页 > 解决方案 > 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} 什么都没有。”

我的正则表达式有什么问题?

标签: regexpowershell

解决方案


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

在你的 之前没有标记*,这是 PowerShell 抱怨的(尽管它谈到了{x,y},这是另一个更通用的量词;我猜它在引发错误之前会转化*为等价物)。{0,}

\.nupkg$可能会做你想做的事,匹配任何以.nupkg.

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

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


推荐阅读