2010-03-26 5 views
3

J'ai un dossier avec 2000+ fichiers. Je veux compter les fichiers par date.Comment regrouper les fichiers par date avec PowerShell?

donc avec:

Mode    LastWriteTime  Length Name 
    ----    -------------  ------ ---- 
    -a---  2010-03-15 12:54 AM 10364953 file1.txt 
    -a---  2010-03-15 1:07 AM 10650503 file2.txt 
    -a---  2010-03-16 1:20 AM 10118657 file3.txt 
    -a---  2010-03-16 1:33 AM 9735542 file4.txt 
    -a---  2010-03-18 1:46 AM 10666979 file5.txt 

Je voudrais voir:

Date   Count 
---------- ------ 
2010-03-15 2 
2010-03-16 2 
2010-03-18 1 

Merci!

Répondre

12

Group-Object peut gérer ce genre de corvée assez facilement:

Get-ChildItem | Group {$_.LastWriteTime.ToString("yyyy-MM-dd")} | Sort Name 

Si vous voulez seulement voir la date et compter le virement sur la table de format comme montré ci-dessous:

Get-ChildItem | Group {$_.LastWriteTime.ToString("yyyy-MM-dd")} | Sort Name | 
    Format-Table Name,Count -auto 
+0

Ah, un one-liner, encore mieux. –

+1

Side Remarque: 'group {$ _. LastWriteTime.Date}' fonctionne également, mais renvoie également l'horodatage de la propriété 'Name' (bien que défini sur' 0: 00: 00'). C'est probablement pourquoi Keith utilise une chaîne formatée ici (ce qui m'a troublé au départ). Une autre option serait 'Format-Table -GroupBy' qui a une sortie différente. – Joey

+0

Plus la chaîne de format obtient la date dans le format Shane voulu. :-). Notez que vous devez faire attention en utilisant Format-Table -GroupBy. Si vous l'utilisez, assurez-vous de trier d'abord ce que vous regroupez, sinon vous pouvez vous retrouver avec le même "groupe" spécifié plusieurs fois. –

2

Vous pouvez utiliser une table de hachage pour recueillir les informations dont vous avez besoin GCI est un alias de rendez-vous childitem

$dict = new-object -t system.collections.hashtable 
gci * |? { $dict[$_.lastwritetime.date]++ } 
$dict 
+0

Impressionnant, qui a fait l'affaire ! –

Questions connexes