1

テキスト ファイルから特定の文字列を読み取り、その文字列を別のテキスト ファイルに出力したいと考えています。

テキスト ファイル (Sample.txt) は次のようになります。

@{AssemblyName=Microsoft.Office.Excel, Version=1.0.0.0, Culture=neutral,     PublicKeyToken=1y08bdf1111e0105c; Path=C:\Tes\app1\cc\application; ProjectPath=C:\test\application\Application.vbproj; Name=Microsoft.Office.Excel}

@{AssemblyName=System; Path=C:\Tes\app2\ser\application; ProjectPath=C:\test\application2\Application.vbproj; Name=System}

アセンブリ名以外は含めたくありません。つまり、スクリプトはバージョン、カルチャなどを考慮すべきではありません。

テキスト ファイルには、このようなアセンブリ情報が多数含まれています。AssemblyNameのみを読み取り、それを powersehl の別のテキスト ファイルに書き込みたいと思います。例: output.txt にはMicrosoft.Office.Excelのみを含める必要があります。

また、次のような特定の文字列で始まるいくつかのアセンブリ名を除外したいと思います: System。どうやってやるの?

以下で試してみましたが、output.txtに何も書き込まれていません。

$workdir = "C:\Test"
$Txt = "$workdir\Sample.txt"

Function GetAsmName($rTxt)
{

Get-Content $Txt

$regex = '@{AssemblyName="(\w*?)"[,|;]'
$matches = (select-string  -Path $Txt -Pattern $regex)
$matches | Select -Expandproperty Matches | Select @{n="Name";e={$_.Groups[1].Value}}
Set-Content -path $workdir\Output.txt -value $matches
}

どんな助けでも大歓迎です。

ありがとう

4

1 に答える 1

2

試す:

$workdir = "C:\Test"
$Txt = "$workdir\Sample.txt"    
Function GetAsmName($rTxt)
{    
$captures = gc $rTxt | 
            select-string -Pattern '(?<=AssemblyName=)([^;|,]*)' -allmatches |
            select -expa matches | select -expa value    
Set-Content -path $workdir\Output.txt -value $captures
}

GetAsmName $Txt
于 2012-11-06T08:04:32.003 に答える