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,那么你可以使用通配符。