获取文本文件中的版本

时间:2016-11-14 19:07:44

标签: powershell

我试图从Version.txt文件中获取一个应用程序版本,循环遍历一堆文件夹。它本身并不是一件大事,但问题是这些文件中还有很多其他内容。

示例:

'1.0.0.1'

'Version - 0.11.0.11'

'ApplicationName - 1.0.12.89'

'Definitely some useful information.
 ApplicationName - 1.0.13.0'

文件始终以版本结尾,但没有其他相关性。版本的长度每次都不同,因为点之间可以有不同的位数。 它让我疯狂。有什么建议吗?

5 个答案:

答案 0 :(得分:0)

由于版本始终位于最后一行,因此请使用Get-Content cmdlet和-tail参数来仅读取最后一行。然后使用Select-String cmdlet和

选择版本
(Get-Content 'Your_File_Path.txt' -Tail 1 | Select-String "(?<=- ).*(?=')").Matches.Value 

<强>输出:

1.0.13.0

答案 1 :(得分:0)

这将在文件中搜索看似具有版本号的所有行,在该文件中使用匹配的最后一行,并仅返回版本号。

$content = Get-Content 'path\to\your\version.txt'
$regex = [regex]"\d+(\.\d+)+"

# Grab the last line in the version file that appears to have a version number
$versionLine = $content -match $regex | Select-Object -Last 1

if ($versionLine) {
    # Parse and return the version
    $regex.Match($versionLine).Value
}
else {
    Write-Warning 'No version found.'
}

适用于您发布的所有版本号,如果版本号看起来位于文件的末尾,但是之后还有其他空格等,则可以使用。

答案 2 :(得分:0)

解决方案1 ​​

((get-content  "C:\temp\file1.txt" -Tail 1) -split "-|'")[1].Trim()


#Code decomposed for explain

#get last row of file
$lastrowfile=get-content  "C:\temp\file1.txt" -Tail 1

#split last row with - or ' as separator
$arraystr=$lastrowfile -split "-|'"

#take element 1 of split and trim final string
$arraystr[1].Trim()

答案 3 :(得分:0)

解决方案2

((get-content  "C:\temp\file1.txt" | where {$_ -like "*ApplicationName*"} | select -Last 1) -split "-|'")[1]

答案 4 :(得分:0)

你可以使用get-content然后拆分:

((get-content  "C:\test.txt" | where {$_ -like "*ApplicationName*"} | select -Last 1) -split "-|'")[1]