2013-07-15 126 views
1

以下我的腳本通過多個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 

我的結果是:

我理想的結果是,如果這是可能的:

Part Number: 459279 
Count: 2 

Filename       LineNumbers 
--------       ----------- 
Customer1.txt      2   
Customer2.txt      3   

我已經手工檢索編號 '459279',從「PartNumbers.txt 「並使用腳本搜索它。

我似乎無法刪除/替換大括號和逗號來呈現一個乾淨的列表。

我希望最終做的是遞歸搜索「PartNumbers.txt」並生成一個報告,每個部件號都附加到上述樣式中的下一個。

PartNumbers.txt格式化:

895725 
939058 
163485 
459279 
498573 

客戶* .TXT格式設置:

163485 
459279 
498573 
+0

,如果你提供這將是有益的來自** PartNumbers.txt **的摘錄,所以我們可以看到格式。很難告訴你如何排除逗號和大括號,而不知道它們來自哪裏。 –

+0

我的歉意,我現在增加了額外的細節。我想指出的是,在我給出的例子中,我手動從文本文件中獲取了部件號並將其複製到腳本中。我還沒有完成循環** PartNumbers.txt **。謝謝。 –

回答

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

這是完美的謝謝。關於如何循環** PartNumbers.txt **並將每個零件編號結果追加到一起的任何提示? –

+0

只需添加一個迭代該文件內容的外部循環。查看更新的答案。 –

+0

謝謝,這真棒。我覺得有趣的是,如果只有一次零件號發生,則計數結果爲空。雖然沒有問題。 –