Vous cherchez de l'aide pour écrire un script qui supprimera un nombre spécifique de caractères à la fin d'un nom de fichier. Dans mon dilemme spécifique, j'ai des dizaines de fichiers au format suivant:
1234567 XKJDFDA.pdf
5413874 KJDFSXZ.pdf
... etc. etc.
Je dois supprimer les 7 derniers caractères alphabétiques pour laisser les 7 chiffres comme nom de fichier. Grâce à une autre question publiée, j'ai pu trouver un script qui supprimerait le premier < cycleX nombre de chiffres du début du nom de fichier, mais je J'ai beaucoup de mal à le modifier pour le supprimer de la fin:
get-childitem * .pdf | rename-item -newname {[string] ($ _. name) .substring (x)}
Toute aide pertinente serait grandement appréciée.
Respectueusement,
3 Réponses :
Vous pouvez écrire une fonction bash rapide pour cela.
fileNameShortener fileName.txt 0 -5
Cela prendra le premier argument. qui est stocké dans $ 1, et créer une sous-chaîne de l'index 0 à l'index 4 caractères à gauche. Ceci est ensuite utilisé dans la commande de déplacement pour déplacer le fichier initial vers le nouveau nom de fichier. Pour généraliser davantage:
function fileNameShortener2() { mv "$1" ${1:$2:$3} }
Ceci peut être utilisé pour donner le point de départ et la longueur de la sous-chaîne comme deuxième et troisième argument de fonction.
function fileNameShortener() { mv "$1" ${1:0:4} }
Mais c'est PowerShell.
EDIT: édité pour conserver l'extension
Il existe une autre méthode substring () qui prend 2 arguments, startIndex et length. https://docs.microsoft. com / fr-fr / dotnet / api / system.string.substring? view = netframework-4.8
get-childitem *.pdf | rename-item -newname { $_.basename.substring(0, $_.basename.length-8) + $_.extension } -whatif What if: Performing the operation "Rename File" on target "Item: /Users/js/1234567890.pdf Destination: /Users/js/12.pdf".
Ainsi, pour supprimer un total de 8 caractères de la droite du nom de base, y compris l'espace:
'hithere'.substring OverloadDefinitions ------------------- string Substring(int startIndex) string Substring(int startIndex, int length)
$RootFolder = '\\server.domain.local\share\folder' @( Get-ChildItem -LiteralPath $RootFolder -Filter '*.pdf' ) | Where-Object { $_.psIsContainer -eq $false } Where-Object { $_.BaseName.Length -gt 7 } | # For files where basename (name without extension) have more than 7 symbols) ForEach-Object { $local:newName = $x[0].BaseName.Substring(0,7) return Rename-Item -LiteralPath $_.FullName -NewName $local:newName -PassThru } | ForEach-Object {Write-Host "New name: $($_.Name)"}
si les noms actuels sont tous
stufftokeep getridofthis.pdf
alors vous pouvez simplement utiliser.BaseName.Split ('') [0]
pour obtenir la partie avant l'espace.La tâche est incorrecte. Je dois supprimer les 7 derniers caractères alpha pour laisser 7 chiffres. Et s'il y avait 9 chiffres alpha et 7 chiffres?