2016-04-06 2 views
0

Я пытаюсь подсчитать файлы в папке с одинаковым шаблоном имени. В этом случае все знаки перед «_» являются важной частью (шаблон).Powershell - подсчет файлов с одинаковым шаблоном имени

Пример (C: \ Temp)
ct24fe_2016-03-01.txt
ct24fe_2016-03-04.txt
ct24fe_2016-03-08.txt
ct24fe_2016-04-01.txt
ct24fe_2016-04-04.txt
xye4ka_2015-03-04.txt
xye4ka_2015-03-08.txt
xye4ka_2015-03-10.txt
xye4ka_2015-03-15.txt
xye4ka_2015-04-01.txt
xye4ka_2015-04-04.txt
zzztgf_2014-04-16.txt
zzztgf_2014-04-18.txt
zzztgf_2014-04-19.txt
zzztgf_2014-05- 15.txt

результат должен быть:

Имя | Подсчет
ct24fe | 5
xye4ka | 6
zzztgf | 4

Как я мог это сделать?

Спасибо за вашу поддержку.

+0

Вы пробовали что-нибудь, с чем мы можем вам помочь? Ожидается, что вы бы попробовали что-то, поскольку SO не является службой написания кода. При этом вам нужно посмотреть «Group-Object», и я думаю, что для этого уже существует дубликат. – Matt

+0

Привет, Мэтт, shure Я пытаюсь Групповой объект. но у меня проблемы с разделением строки и сбор/подсчет/группировка результатов. Я искал его, но я мог найти только пример для группы к той же дате. – Manuel

ответ

0

Так что я придумал это:

$input = "your stuff" 
$array = New-Object System.Collections.ArrayList 
$input | % {$array.Add($_.split("_")[0])} 

$array | Group-Object -NoElement 
+0

Я буду держать это решение с массивами в уме, прекрасно работает. Это решение немного медленнее, чем душа @mjolinor – Manuel

0

Одним из возможных вариантов:

(Get-ChildItem c:\temp -Name) -replace '_.*' | Group-Object -NoElement 
+0

Добавить '|% {write-host $ _. Name" | " $ _. count} 'до конца этого, чтобы получить точный запрошенный формат вывода. – LinuxDisciple

+0

работает идеально и очень быстро – Manuel

0

Group-Object поддерживает scriptblocks для -Property аргумента, вы можете трубы файлы непосредственно к нему:

Get-ChildItem C:\temp |Group-Object {$_.Name -split '_' |Select -First 1} -NoElement 
+0

работает идеально и очень быстро – Manuel

Смежные вопросы