2016-11-14 169 views
0

我試圖從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' 

文件總是與版本結束,但沒有其他的相關性。每次版本的長度都不相同,因爲點之間可能有不同數量的數字。 這讓我瘋狂。有什麼建議麼?

+1

嗨,你可以請編輯你的問題,包括你到目前爲止嘗試過的代碼嗎? – sodawillow

+0

好吧,如果它的最後一個,得到最後一個字符串並解析它? – 4c74356b41

+0

如果您的輸入始終具有上面列出的四種不同輸入中的任何一種的格式,那麼您可以通過運行'($ version_text -split「 - 」| select -last 1).Trim()'來獲得版本號。它也應該與你的其他例子一起工作。這裏'$ version_text'包含你的輸入字符串,即Version.txt的內容。 – kim

回答

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() 
+0

這可以很好地工作,但在返回字符串的開始處總是有一個空格鍵。我可以要求解釋一下你的代碼嗎? –

+0

我已修改我的空間代碼並解釋我的代碼;) – Esperento57

+0

非常感謝!我將它縮短爲:(Get-Content $ VersionFilePath -Last 1).Split(「 - |'」)[1] .Trim() –

0

因爲版本總是在最後一行,使用Get-Content cmdlet與-tail參數只讀最後一行。

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

輸出:

1.0.13.0 
+0

謝謝Martin,但由於某種原因它不起作用。雖然沒有錯誤。 –

0

這將在文件中搜索出現對他們有一個版本號的所有行,採取然後使用Select-String小命令和選擇版本在該文件中匹配最後一行,並返回版本號。

$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.' 
} 

與所有您發佈的版本號的工作,如果版本號似乎是在文件的結尾會的工作,但有額外的空格之後,等

+0

對不起,它根本不起作用。 –

+0

奇怪。它會拋出一個錯誤嗎?你正在運行哪個版本的PowerShell?我在v5上測試過這個。 –

0

解決方案2

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

可以使用Get-內容,然後分:

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