2016-11-14 7 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

入力が常に上記の4つの異なる入力のいずれかのフォーマットを持っているなら、 '($ 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

バージョンは常に最終行にあるため、-tailパラメータを指定したGet-Contentコマンドレットを使用して最後の行のみを読み取ります。その後Select-Stringコマンドレットと使用してバージョンを選択:

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

出力:

1.0.13.0 
+0

マーティンありがとう、それは何らかの理由で動作しません。しかし、エラーはありません。 –

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

など

+0

申し訳ありませんが、全く動作しません。 –

+0

奇妙な。それはエラーを投げますか? PowerShellのどのバージョンを実行していますか?私はこれをv5でテストしました。 –

0

ソリューション2

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