Vous pouvez utiliser PowerShell !
$dupes = gi $args[0] | gci -File -Recurse | group Name | ? {$_.Count -gt 1}
gi $args[0] | gci -Directory | ? {
$allDupes = $true
$hasAny = $false
$_ | gci -File | % {
$folder = $_
$hasAny = $true
If (!($dupes | ? {$_.Name -eq $folder.Name})) {$allDupes = $false}
}
$allDupes -and $hasAny
}
Ce script est un peu délicat, alors parcourons-le attentivement. Tout d'abord, il prend le dossier spécifié en argument, trouve récursivement les fichiers qu'il contient, les regroupe par nom de fichier, ne prend que les groupes contenant plus d'un élément (c'est-à-dire les groupes qui représentent des chansons dupliquées), et stocke cette collection de groupes dans le dossier $dupes
. Ensuite, il récupère à nouveau le répertoire parent spécifié, mais ne liste que les sous-dossiers immédiats. Elle les filtre ( ?
), en laissant seulement ceux qui ne contiennent que des entrées dupliquées sortir du pipeline et être imprimés à l'écran.
Ce gros bloc de filtre occupe la majeure partie du script, alors regardons-le plus en détail. Il commence avec deux variables, l'une pour garder la trace du fait que le dossier actuel de l'album ne contient que des doublons jusqu'à présent, et l'autre pour noter s'il y a réellement des chansons dans le dossier. (Je soupçonne qu'il ne serait pas vraiment utile de compter les dossiers vides comme des albums de compilation). Elle liste les fichiers dans le dossier de l'album, puis pour chacun d'entre eux ( %
), s'assure qu'il existe un groupe en double contenant un fichier de même nom, et si ce n'est pas le cas (c'est-à-dire que rien ne sort du pipeline court à l'intérieur de l'élément If
), indique l'échec en mettant $allDupes
à faux. Si le bloc for-each n'a pas été exécuté du tout, alors $hasAny
reste faux. Enfin, le grand bloc de filtrage évalue si tous les éléments de l'album sont des doublons et s'il y en a réellement. Le résultat de l'expression détermine si le dossier de l'album sera inclus dans la sortie du pipeline externe.
Notez que certaines des fonctionnalités PowerShell utilisées dans ce script ont été introduites modérément récemment. Si vous utilisez Windows 7, la fonction -File
y -Directory
Les interrupteurs ne fonctionneront pas. Il est possible de contourner ce problème si nécessaire.
Pour utiliser le script, sauvegardez-le en tant que .ps1
fichier, par exemple albumdupes.ps1
. Si vous ne l'avez pas déjà fait, suivez les instructions de la section Activer les scripts de la page le wiki des balises PowerShell . Vous pouvez ensuite l'exécuter à partir d'une invite PowerShell dans le répertoire où vous l'avez enregistré, en indiquant le chemin d'accès à votre dossier d'artiste :
.\albumdupes.ps1 'C:\Users\Ben\Test\albumtest'
Vous obtiendrez un résultat comme celui-ci :
Directory: C:\Users\Ben\Test\albumtest
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 11/20/2017 2:00 PM Album C
d----- 11/20/2017 2:01 PM Album F