在PowerShell中使用正则表达式(或类似格式)重新排列提取的版本号

时间:2018-07-16 10:53:03

标签: regex powershell

我正在使用下面的PowerShell命令从可执行文件中提取File Version参数并写入变量,这很好用(在此处找到提取命令:Get file version in PowerShell

$ver = [System.Diagnostics.FileVersionInfo]::GetVersionInfo("somefilepath").FileVersion

使用以上内容,我通常会看到一个文件版本,如下所示:

11.2.1617.1

我想要实现的是重新排列并稍微修改输出,使其显示为:

11.2.1.617

请注意,已经从“ 1617”中删除了“ 1”,然后将“ .617”和“ .1”交换了位置。

我希望将更正的版本号存储在一个新变量(例如$ vernew)中,以便在两个不同的变量中同时具有原始值和新值。文件版本会随着时间而变化,但格式始终相同(例如XX.X.XXX.X)。

任何人都可以提出实现此目标的最合适方法吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

对于交换,您可以为此使用简单的-replace操作:

$ver = $ver -replace '^(\d+)\.(\d+)\.(\d+)\.(\d+)','$1.$2.$4.$3'

这将捕获四组数字并交换最后两组数字

但是由于您需要更改捕获的值之一,因此建议您这样做:

# grab the individual parts
$major,$minor,$build,$revision = $ver -split '\.'

# remove first character from the 3rd block
$build = $build.Substring(1)

# concatenate them in the new order
$newver = $major,$minor,$revision,$build -join '.'