2012-11-06 193 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)([^; |,] +)'' –

相關問題