Étape 2: Utilisation de Powershell pour dossiers de garniture
J’ai voulu créer une solution qui peut être utilisée avec un script pré-installé pour une plateforme
Sous Windows, le choix que j’ai fait était de PowerShell. Ce langage de script basé sur le .NET framework est configuré sur les versions les plus récentes de Windows et est même disponible en téléchargement pour XP. En outre, le cadre fournit une longue liste de blanchisserie de fonctionnalités qui pointe ma curiosité. La plupart de ces caractéristiques entre dans la catégorie des - "qui fait les choses beaucoup plus simples" - mais débordent le cadre de cette discussion. Dans l’ensemble, j’ai trouvé la langue facile à ramasser en utilisant une combinaison d’essais et d’erreurs avec des guides de référence de langue et des recherches sur internet pour obtenir des exemples de syntaxe. Recherches pourrait m’aider non seulement trouver des réponses aux problèmes immédiats, mais me donner des idées pour d’autres solutions. Documentation découverte a invité et était facilement disponible à l’invite de commandes. En outre, un ide (powershell_ide) est disponible sans avoir besoin de faire aucune installation supplémentaire. La seule chose que j’avais à faire était activer mes scripts à exécuter. Les deux images illustrent la commande que j’ai couru comme administrateur permettant à mes scripts à exécuter et l’ide qui sont accessibles rapidement en contexte en cliquant sur un fichier avec une extension ps1 et en sélectionnant Modifier.
La solution est personnalisée pour les fichiers d’entrée structure d’affectation de noms. Diverses conventions de nommage peuvent nécessiter une légère modification à pour le processus de script. (plus sur cela plus tard)
Les conditions préalables :
- La séquence de fichier est séparée dans leur propre répertoire.
- Les fichiers auront la convention de nommage de séquence-# .extension, leur permettant d’être ensuite combiné avec d’autres séquences.
- exemples : 1.mp3-Conférence lecture13.mp3 conférence-5.mp3
- exemples : ece453_lecture-1.mp3 ece453_lecture-1.mp3
- exemple - pas : ece453-conférence-1.mp3
Le processus :
- parcourir tous les noms de fichiers dans un répertoire
- briser les noms de fichiers
- trouver le nombre maximal de chiffres dans la partie numérotée de la séquence
- parcourir tous les noms de fichiers dans un répertoire
- briser les noms de fichiers (réutilisation si stocké)
- reconstruire le nom de fichier avec le nombre maximum de chiffres apparaissant ci-dessus
- Déplacez le fichier vers le nouveau nom (sortie de test avant l’exécution de / copie au lieu de déménagement)
# Zero padding file Numbers<br>$dir = "c:\dev\data" $items = Get-ChildItem -Path $dir # create new file names & move foreach ($item in $items) { # if the item is a directory, then process it. if ($item.Attributes -ne "Directory") { # Write-Host $item.Name $fs1 = $item.Name.split(".") $fs2 = $fs1[0].split("-") $siz = $fs2[1] | Measure-Object -Character | select -expandproperty characters if ( $siz -gt $places) { $places = $siz # Write-Host "places is " $places } #$num = $fs2[1].toString("000") #Write-Host $num } } foreach ($item in $items) { # if the item is a directory, then process it. if ($item.Attributes -ne "Directory") { # Write-Host $item.Name $fs1 = $item.Name.split(".") $fs2 = $fs1[0].split("-") #$siz = $fs2[1] | Measure-Object -Character | select -expandproperty characters $fmt = '{0:D' + $places + '}' $newnum = $fmt -f $fs2[1] $newnum = $fs2[1].toString().PadLeft($siz+1, "0") $newnam = $fs2[0] + "-" + $newnum + "." + $fs1[1] # Write-Host $newnam $item | rename-item -NewName $newnam } }
La structure du nom me permet d’enlever les différentes parties du nom du fichier et obtenir au numéro. Je vérifie si le nombre contient davantage de chiffres que les chiffres précédemment enregistrés. Dans l’affirmative, je mettre à jour le numéro pour vérifier les itérations suivantes. Une fois que j’ai vérifié tous les fichiers, je peux utiliser ce que j’ai trouvé pour reconstituer le nombre et déplacer le fichier dans le nom désiré.