1

xml ファイルがあり、メインの文字列から特定の部分文字列のみを読み取る必要があります。xml ファイルは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<Report Version="10.0">
<Entities>
<Entity Name="\\sharing\Data\SB\**appname**\wcf\Utilitysvc\bin\svcUtility.Host.dll">
<Mods>
<Mod Name="svcUtility.Host.dll" AssemblyVersion="1.0.2000.001">
<Fields>
<Field Name="TIndex" Value="100" />            
<Field Name="Vindex" Value="200" />
</Fields>
</Mod>
</Mods>
</Entity>
</Entities>
</Report>

この xml の主な文字列は -

<Entity Name="\\sharing\Data\SB\**appname**\wcf\Utilitysvc\bin\svcUtility.Host.dll">

そして、そこから「アプリ名」だけを出力する必要があります。

PowerShellで正規表現を使用してこれを印刷するには、どの条件ロジックを使用できますか? また、常に appname の後に \wcf である必要はありません..dll パスに基づいたものであれば何でもかまいません。たとえば、次のようになります。

<Entity Name="\\sharing\Data\*SB*\**appname**\**Web**\Utilitysvc\bin\svcUtility.Host.dll">

また

<Entity Name="\\sharing\Data\*SB*\*DEVCS*\**appname**\**junk**\Utilitysvc\bin\svcUtility.Host.dll">

一般的な select -string の方法を使用できますか? これもテストする必要があります..

ありがとう、
アシッシュ

4

2 に答える 2

2

これは方法です:

$xml = [xml](get-content .\my.xlm )

 ($xml.Report.Entities.Entity.name | 
% { [regex]::matches($_, 'SB\\(.*)\\wcf') } |
 select -expand groups)[1].value

[正規表現] .net メソッドなし:

($xml.Report.Entities.Entity.name |
select-string 'SB\\(.*)\\wcf' -AllMatches | select -ExpandProperty matches |
select -ExpandProperty groups)[1].value

編集:

最後のコメントに基づいて、このパターンを試してください。

 ($xml.Report.Entities.Entity.name |
    select-string '(?<=\\Data\\.*\\)[^\\]*' -AllMatches |
    select -ExpandProperty matches |
    select -ExpandProperty groups)[0].value
于 2012-10-23T06:14:27.727 に答える
1

複雑な正規表現を使用せずに、パスを分割して 5 番目の要素を取得できます (映画の名前のように聞こえます)。

[xml]$xml = @"
<?xml version="1.0" encoding="utf-8"?>
<Report Version="10.0">
<Entities>
<Entity Name="\\sharing\Data\SB\**appname**\wcf\Utilitysvc\bin\svcUtility.Host.dll">
<Mods>
<Mod Name="svcUtility.Host.dll" AssemblyVersion="1.0.2000.001">
<Fields>
<Field Name="TIndex" Value="100" />            
<Field Name="Vindex" Value="200" />
</Fields>
</Mod>
</Mods>
</Entity>
</Entities>
</Report>
"@

$xml.Report.Entities.Entity.Name.split('\')[5]

**appname**
于 2012-10-23T06:12:20.310 に答える