# Supprimer automatiquement un nombre de caractères



## kara18 (27 Octobre 2020)

Bonjour,

J'ai plusieurs photos réalisées lors d'un shooting. 
Chaque fichier porte le nom de la mannequin suivi d'un tiret avec 4 chiffres aléatoires.
exemple :
LYNA_2395.psd
VANESSA_6509.psd 

Comment puis-je venir automatiquement supprimer automatiquement le tiret bas + les 4 derniers chiffres ?

Merci d'avance de votre aide.


----------



## ericse (27 Octobre 2020)

Bonjour,
De base le finder ne le permet pas, tu peux le faire avec un utilitaire comme https://apps.apple.com/fr/app/better-rename-11/id1501308038?mt=12


----------



## zeltron54 (28 Octobre 2020)

Bonjour,

S'il suffit de supprimer les 5 derniers caractères du nom du fichier, un petit applescript doit pouvoir faire l'affaire...
MAIS attention le risque est de se trouver avec 2 fichiers de même nom, donc pour éviter l'erreur que faut-il faire dans ce cas ?


----------



## zeltron54 (28 Octobre 2020)

@kara18 

Je t'ai écrit un script, qui te demande de sélectionner le dossier contenant les fichiers à traiter
Il enlève les 5 derniers caractères du nom des fichiers.
Dans le cas ou il existe un fichier portant déjà ce nom, il ne le change pas et il crée un fichier texte "Les erreurs.txt" sur le bureau qui contient le nom du fichier posant problème (1 par ligne)

Dis moi si cela te convient !
Pense à faire un essai sur une copie...


```
set MasterFolder to choose folder with prompt "Sélectionner le dossier contenant les fichiers à renommer"

tell application "Finder"
    set FolderContents to files of folder MasterFolder
end tell

repeat with thisFile in FolderContents
    
    set extens to thisFile -- recupere l'extension du fichier
    set lextension to name extension of extens
    
    set thisFilesName to name of thisFile -- récupere le nom du fichier complet
    set sauv to AppleScript's text item delimiters --sauvegarder la variable delimiteur
    set AppleScript's text item delimiters to {"."} --récupère la partie avant le dernier "."
    set elements to text items of thisFilesName
    set nomcourt to (items 1 thru -2 of elements) as string
    set ancien_nom to nomcourt -- nom sans extension
    set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
    
    set newName to characters 1 thru -6 of ancien_nom as string --recupere le nom jusqu'au 5ieme caractere avant la fin
    set nouveau_nom to newName & "." & lextension --le nouveau nom avec le . et l'extension
    
    try
        set name of thisFile to nouveau_nom --renomme le fichier
    on error
        set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
        write "Le fichier : " & ancien_nom & " devait devenir " & nouveau_nom & " qui existe déja" & return to lelog starting at eof
        close access lelog
    end try
    
end repeat

tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
```


----------



## zeltron54 (29 Octobre 2020)

Bonjour,
Une nouvelle version, qui teste si le fichier existe avant, au lieu de traiter l'erreur.


```
set MasterFolder to choose folder with prompt "Sélectionner le dossier contenant les fichiers à renommer"

tell application "Finder"
    set FolderContents to files of folder MasterFolder
end tell

repeat with thisFile in FolderContents
    
    set extens to thisFile -- recupere l'extension du fichier
    set lextension to name extension of extens
    
    set thisFilesName to name of thisFile -- récupere le nom du fichier complet
    set sauv to AppleScript's text item delimiters --sauvegarder la variable delimiteur
    set AppleScript's text item delimiters to {"."} --récupère la partie avant le dernier "."
    set elements to text items of thisFilesName
    set nomcourt to (items 1 thru -2 of elements) as string
    set ancien_nom to nomcourt -- nom sans extension
    set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
    
    set newName to characters 1 thru -6 of ancien_nom as string --recupere le nom jusqu'au 5ieme caractere avant la fin
    set nouveau_nom to newName & "." & lextension --le nouveau nom avec le . et l'extension
    
    tell application "Finder"
        try
            set test to (container of thisFile) as string
            set test to test & nouveau_nom
            
            if exists test then
                set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                write "Le fichier : " & ancien_nom & " devait devenir " & nouveau_nom & " qui existe déja" & return to lelog starting at eof
                close access lelog
            else
                set name of thisFile to nouveau_nom --renomme le fichier
            end if
            
        on error
            set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
            write "ERREUR ! Le fichier : " & ancien_nom & " devait devenir " & nouveau_nom & " n'a pas été changé !" & return to lelog starting at eof
            close access lelog
        end try
        
    end tell
end repeat

tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
```


----------



## kara18 (29 Octobre 2020)

Formidable !!! je te remercie !!
merci merci de ton aide et de ta gentillesse.


----------

