我想从文本文件中读取一个特定的字符串,然后将该字符串输出到另一个文本文件中。
我的文本文件(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
}
非常感谢任何帮助。
谢谢你
答案 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