Regex 格式化从正则表达式中提取的数字

Regex 格式化从正则表达式中提取的数字,regex,powershell,filesize,Regex,Powershell,Filesize,我尝试了多种方法来格式化一个数字并将其转换为KB,但它不起作用,可以使用正确格式/方法的帮助来执行此操作 ((robocopy $Root NULL $Filter $params)) | ForEach { If ($_ -match "(?<Size>\d+)\s(?<Date>\S+\s\S+)\s+(?<FullName>.*)") { $Report += New-Obj

我尝试了多种方法来格式化一个数字并将其转换为KB,但它不起作用,可以使用正确格式/方法的帮助来执行此操作

((robocopy $Root NULL $Filter $params)) | ForEach {
            If ($_ -match "(?<Size>\d+)\s(?<Date>\S+\s\S+)\s+(?<FullName>.*)")
            {
                $Report += New-Object PSObject -Property @{
                    Size = "{0:N1}" -f $matches.Size / 1KB
                    #Size = [System.Math]::Round(([long]$matches.Size / 1KB), 2)
                    Date = [datetime]$matches.Date
                    FullName = $matches.FullName
                }
            }
((robocopy$Root NULL$Filter$params))| ForEach{
如果($匹配“(?\d+)\s(?\s+\s\s+)\s+(?*)”)
{
$Report+=新对象PSObject-属性@{
Size=“{0:N1}”-f$matches.Size/1KB
#Size=[System.Math]::四舍五入(([long]$matches.Size/1KB),2)
日期=[datetime]$matches.Date
FullName=$matches.FullName
}
}

这两种方法都返回以字节为单位的大小,而不进行任何文件大小转换。

-f
优先于
/
,因此您最终得到以下结果:

("{0:N1}" -f $matches.Size) / 1KB
将第二个操作嵌套在括号中,它将起作用:

Size = "{0:N1}" -f ($matches.Size / 1KB)

感谢@Mathias R.Jessen的输入。事实上,我发现了这个问题,并且承认我在另一个位置有相同的代码行,这是基于条件的。我想我需要开始构建一些函数调用,这样我就不会再这样做了。相关帮助主题: