我试图从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'
文件始终以版本结尾,但没有其他相关性。版本的长度每次都不同,因为点之间可以有不同的位数。 它让我疯狂。有什么建议吗?
答案 0 :(得分:0)
由于版本始终位于最后一行,因此请使用Get-Content
cmdlet和-tail
参数来仅读取最后一行。然后使用Select-String
cmdlet和regex:
(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]