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并将其写入 powersehll 中的另一个文本文件。例如: 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 回答