1
votes

Comment supprimer le dernier X numéro de caractère du nom de fichier

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,


2 commentaires

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?


3 Réponses :


0
votes

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}
}


1 commentaires

Mais c'est PowerShell.



0
votes

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)


0 commentaires

1
votes
$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)"}

0 commentaires