2017-06-27 4 views
0

私がKIXファイルをインポートしていKIXファイル内の文字列を置換:PowerShellRegexマッチと

$KIXOLD = get-content E:\File.kix 

ファイルには、このようなコンテンツが含まれています

$ScriptVer = "12.0"    ; Current Script Version Number 

私は、スクリプト・バージョンを取得する必要がありますこの場合は12.0ですが、その数はインポートするファイルによって異なる場合があります。

私はこのようなSelect-Stringと正規表現しようとしました:

$OLDVER = $KIXOLD | Select-String -Pattern "\$ScriptVer = `"\d\d\.\d`"" 

をしかし、それはまだ; Current Script Version Numberを含む行全体をつかむだけでなく$scriptver = "12.0"私が想像

これは単純なことを持って、私それはすべて間違っていますが、私が試したことは何も私のために働いていません。

最終目標はそれを、intとして12.0を取得し、それをインクリメントして置き換えることであろうが、私はKIX

を提出マルチ千行の残りの部分から $scriptver = "12.0"を隔離することができるまで、私はそこまで取得することはできません

答えて

1

この

get-content "E:\File.kix" | where {$_ -like '$ScriptVer*'} | %{$_.split('=;"')[2]} 
+0

は、これはまだ '$ scriptver'完璧に働いた、どうもありがとう私の最後の命題 – Nick

+0

と同じライン上にある任意の他握ります! – Esperento57

+0

を試してみてください – Nick

0

はこのヘルプをいしてみてください? $ OLDVER = [正規表現] ::マッチ($ KIXOLD、 "ScriptVer =([1-9] \ D \ D)。")のグループ[1]

1

その他mehod .VALUE:。

[email protected]" 
{Row*:ScriptVer = "{Version:12.0}"    ; Xxx} 
"@ 


(get-content "E:\File.kix" | ConvertFrom-String -TemplateContent $template).Row.Version 
0

Select-StringはRegex MatchInfoオブジェクトを出力します。値を取得するには、そのグループと一致するテキストのグループを指定して一致を展開し、グループを展開して値を展開する必要があります。

$Ver = Select-String -Path E:\File.kix -Pattern '^\$ScriptVer = "(.*?)"' | 
      Select-Object -ExpandProperty Matches | 
      ForEach-Object { $_.Groups[1].Value }