2012-11-06 143 views
1

我想从文本文件中读取特定的字符串并将该字符串输出到另一个文本文件中。如何使用PowerShell从文本文件中读取字符串

我的文本文件(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 ..即任何东西,剧本不应该考虑版本,文化等

文本文件有很多这样的程序集信息。 我想只读AssemblyName并写入powersehll中的另一个文本文件。 For Ex: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 
} 

任何帮助将不胜感激。

感谢

回答

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 
+0

大!这工作完美。谢谢!:) –

+0

另外,如何排除名称以System开头的程序集? –

+0

@ashishg尝试这种模式'(?<= AssemblyName =)(?! system)([^; |,] +)'' –

相关问题