2016-04-06 4 views
0

Dosyaları aynı ad düzenine sahip bir klasörde saymaya çalışıyorum. Bu durumda "_" den önceki her işaret önemli kısımdır (desen).Powershell - aynı isim desenine sahip dosyaları sayma

Örnek (C: \ sıcaklığı)
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

sonucu olmalıdır:

Adı | Sayı
ct24fe | 5
xye4ka | 6
zzztgf | 4

Bunu nasıl yapabilirim?

Desteğiniz için teşekkürler.

+0

Size yardımcı olabileceğimiz bir şey denediniz mi? SO'nun bir kod yazma hizmeti olmadığı için bir şey denemeniz beklenir. “Grup-Nesne” ye bakmanız gerektiği söyleniyor ve bunun için zaten bir kopyası var. – Matt

+0

Merhaba Matt, Grup Nesnesini deneyin. ancak dizgenin ayrılmasıyla ilgili problemlerim var ve sonuçları topla/say/gruplandır. Onu aradım ama aynı tarihte grup için sadece bir örnek bulabilirdim. – Manuel

cevap

0

Yani bu ile geldim:

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

$array | Group-Object -NoElement 
+0

Bu çözümü akılda tutarak dizilerim yerinde tutacağım, mükemmel çalışıyor. Bu çözüm, @mjolinor'un – Manuel

0

Bir olasılık:

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

ruhsatından biraz daha yavaştır. |% {Write-host $ _. Name "|" Tam olarak istenen çıktı biçimini almak için bunun sonuna $ _. – LinuxDisciple

+0

mükemmel çalışıyor ve çok hızlı – Manuel

0

Group-Object-Property argüman için scriptblocks destekler, sen boru yapabilirsiniz doğrudan dosyaları ona:

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

mükemmel çalışıyor ve çok hızlı – Manuel