如何使用powershell从文本文件中读取字符串

时间:2012-11-06 07:13:07

标签: powershell text substring

我想从文本文件中读取一个特定的字符串,然后将该字符串输出到另一个文本文件中。

我的文本文件(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中的另一个文本文件。 对于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
}

非常感谢任何帮助。

谢谢你

1 个答案:

答案 0 :(得分: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