我的下面的脚本通过许多txt文件递归搜索特定的部件号(459279)。
set-location C:\Users\admin\Desktop\PartNumbers\
$exclude = @('PartNumbers.txt','*.ps1')
$Line = [Environment]::NewLine
Get-ChildItem -Recurse -Exclude $exclude | select-string 459279 | group count | Format-Table -Wrap -AutoSize -Property Count,
@{Expression={$_.Group | foreach { $_.filename} | Foreach {"$_$Line"} }; Name="Filename"},
@{Expression={$_.Group | foreach {$_.LineNumber} | Foreach {"$_$Line"} }; Name="LineNumbers"} | Out-File 459279Results.txt
我的结果是:
Count Filename LineNumbers
----- -------- -----------
2 {Customer1.txt {2
, Customer2.txt , 3
} }
如果可能的话,我的理想结果是:
Part Number: 459279
Count: 2
Filename LineNumbers
-------- -----------
Customer1.txt 2
Customer2.txt 3
我手动从“PartNumbers.txt”中检索了部件号“459279”,并使用该脚本进行了搜索。
我似乎无法移除/替换大括号和逗号以显示清单。
我希望最终做的是递归搜索“PartNumbers.txt”并生成一个报告,其中每个部件编号都附加到上面提到的样式中。
PartNumbers.txt的格式为:
895725
939058
163485
459279
498573
客户* .txt的格式为:
163485
459279
498573
答案 0 :(得分:1)
这样的事情应该有效:
$exclude = 'PartNumbers.txt', '*.ps1'
$root = 'C:\Users\admin\Desktop\PartNumbers'
$outfile = Join-Path $root 'loopResults.txt'
Get-Content (Join-Path $root 'PartNumbers.txt') | % {
$partno = $_
$found = Get-ChildItem $root -Recurse -Exclude $exclude `
| ? { -not $_.PSIsContainer } `
| Select-String $partno `
| % {
$a = $_ -split ':'
New-Object -Type PSCustomObject -Property @{
'Filename' = Split-Path -Leaf $a[1];
'LineNumbers' = $a[2]
}
}
"Part Number: $partno"
'Count: ' + @($found).Count
$found | Format-Table Filename, LineNumbers
} | Out-File $outfile -Append