# Renommer fichiers en masse puis les déplacer dans un dossier parent



## Cri_fra (18 Novembre 2020)

Bonjour à tous,

Je découvre l'univers du MAC et automator.

J'ai dans un dossier 1, plusieurs sous dossier A à F (par exemple). Dans chaque sous dossier il y a un fichier au format PDF parfois .pages
J'aimerai renommer chaque fichier avec le nom du sous-dossier et qu'ensuite ce fichier renommer soit déplacer dans le dossier 1.
Le grand luxe serait la conversion de format pages en PDF. ( j'ai trouvé sur le forum le script que Zeltron 54 a rédigé,https://forums.macg.co/threads/automator-page-pdf.1268151/ un grand merci d'ailleurs, cela me fait gagner beaucoup de temps)

J'ai essayé avec Automator, mais je ne peux ( ou ne sais) pas choisir le nom du dossier parent.
J'arrive plus ou moins à déplacer des fichiers d'un sous-dossier vers le dossier parent, j'ai une erreur sur la dernière étape. Je vous joins les captures d'écran de mon test.
Merci pour votre aide.


----------



## zeltron54 (18 Novembre 2020)

bonsoir,
Pour faire cela, il faut être sur qu'il n'y ai qu'un seul fichier dans chaque sous dossiers ?

Ensuite pour transformer les pages en pdf tu te sers du script que tu cites en l'appliquant au dossier.

Donc le tout en 2 fois (2 script différent).


----------



## Cri_fra (18 Novembre 2020)

Bonsoir,
Dans chaque sous dossier, il n'y a qu'un seul fichier.
Si jamais il y en a deux, est-ce un problème ? 
Merci de ton aide.


----------



## zeltron54 (18 Novembre 2020)

oui s'il y en a plusieurs, lorsque on va renommer le 2ieme , le nom existera déja, donc erreur.


----------



## Cri_fra (18 Novembre 2020)

Bonsoir,
Jusqu'à présent, et j'y veillerai pour la suite, il n'y a qu'un seul fichier par dossier.


----------



## zeltron54 (18 Novembre 2020)

OK !
Alors essai ce script et dis moi si cela te convient.


```
property origine : ""
tell application "Finder"
    
    set chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à trier"
    set origine to chemin as string
    my inspecter(chemin)
end tell

on inspecter(un_dossier)
    tell application "Finder"
        
        set les_fichiers to files of un_dossier
        
        repeat with chaque_fichier in les_fichiers
            
            set nom to name of chaque_fichier --récupère le nom du fichier
            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 nom
            set nomcourt to (items 1 thru -2 of elements) as string
            set lextension to name extension of chaque_fichier -- ou (document file nom in cible)
            set chemindossier to container of chaque_fichier ---- idem cible as string
            set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
            
            set xx to chemindossier as string
            
            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 dd to text item -2 of xx
            set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
            set name of chaque_fichier to dd & "." & lextension
            set newfich to xx & dd & "." & lextension
            --deplace dans dossier origine
            move newfich to origine
        end repeat
        
        -- traitement des dossiers :
        set les_dossiers to folders of un_dossier
        repeat with chaque_dossier in les_dossiers
            my inspecter(chaque_dossier)
        end repeat
        
    end tell
end inspecter

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


----------



## Cri_fra (18 Novembre 2020)

Bonsoir,
Super cela fonctionne.
Serait-il possible de garder le nom du fichier et d'y rajouter le nom du dossier, c'est ce que je voulais mais j'ai oublié de le dire  : 

Exemple: 
Nom du sous dossier : prenom nom
Nom du fichier : PC5
Nom final : prenom_nom_PC5

Est-il possible de supprimer les dossiers vides à la fin ?

Désolée, de me montrer plus exigeante, mais étant donné ton efficacité, j'en abuse.

Merci.


----------



## zeltron54 (18 Novembre 2020)

Alors voilà les changements

dis moi si c'est bon pour toi .


```
property origine : ""
tell application "Finder"
    
    set chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à trier"
    set origine to chemin as string
    my inspecter(chemin)
end tell

on inspecter(un_dossier)
    tell application "Finder"
        
        set les_fichiers to files of un_dossier
        
        repeat with chaque_fichier in les_fichiers
            
            set nom to name of chaque_fichier --récupère le nom du fichier
            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 nom
            set nomcourt to (items 1 thru -2 of elements) as string
            set lextension to name extension of chaque_fichier -- ou (document file nom in cible)
            set chemindossier to container of chaque_fichier ---- idem cible as string
            set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
            
            set xx to chemindossier as string
            
            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 dd to text item -2 of xx
            set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
            set name of chaque_fichier to dd & "_" & nomcourt & "." & lextension
            set newfich to xx & dd & "_" & nomcourt & "." & lextension
            
            --deplace dans dossier origine
            move newfich to origine
            do shell script "rm -R " & quoted form of POSIX path of xx
        end repeat
        
        -- traitement des dossiers :
        set les_dossiers to folders of un_dossier
        repeat with chaque_dossier in les_dossiers
            my inspecter(chaque_dossier)
        end repeat
        
    end tell
end inspecter

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


----------



## Cri_fra (18 Novembre 2020)

Bonsoir,
C'est super cela fonctionne. Merci.
J'ai utilisé le script pour convertir les .pages en .PDF cela fonctionne aussi bien que j'ai un message d'erreur à la fin.
Les fichiers sont pourtant tous bien convertis dans le dossier destination.
Je te joins la capture d'écran.
Encore merci.


----------



## zeltron54 (18 Novembre 2020)

Je ne vois pas d’où viens l’erreur, une histoire de nom de dossier ? 
Enfin si tout est converti c’est l’essentiel ...
merci pour le retour.


----------



## Pam (3 Décembre 2021)

Bonjour, je ne sais pas si je peux rebondir sur ce sujet, mais il me semble que ma question est assez proche de celle de Cri-fra.
Je n'ai jamais utilisé automator, mais je pense que cela pourrait me rendre service pour renommer des fichiers en masse. J'ai un dossier de plusieurs centaines de fichiers, et j'aimerais modifier le nom de ces fichiers de manière à :

remplacer les majuscules par des minuscules
supprimer les accents (remplacer "é", "è", "ê" par "e", "à", "â" par "a", "î" par "i", et "ô" par "o")
remplacer les espaces par "-"
remplacer " - " (tiret entre deux espaces) par "-"
remplacer "/" par "-"
J'ai plus de 1500 fichiers dans le dossier (je ne sais pas, d'ailleurs, s'il y a un maximum à ne pas dépasser) et cela me ferait clairement gagner du temps 
Merci par avance pour vos réponses !


----------



## zeltron54 (3 Décembre 2021)

@Pam
Bonjour,
 
J'avais fait un truc du genre là : https://forums.macg.co/threads/recherche-de-caracteres-speciaux-a-la-volee.1365583/page-5
 
Je l'ai adapté pour qu'il réponde à ta demande.
Il supprime tous les caractères accentués, il remplace les caractères spéciaux ()[]{}/%@#"?.\ par des tirets , les ,; par des tirets bas, il supprime les > <  ainsi que tous les espaces en début, et en fin du nom, il traite les fichiers sans extension, et j'ai ajouté le remplacement des majuscules par les minuscules et les espace par "-"
La suite dans le post suivant !


```
-- renomme les fichiers et les dossiers en supprimant les caractères spéciaux
--ÀÁÂàÄÅàáâàäåÒÓÔÕÖòóôõöÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ()[]{}/%@#",;?!.\>< (majuscule par minuscule)
--AAAaAAaaaaaaOOOOOoooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn---------------__--
tell application "Finder"
    set lechemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers et dossiers à traiter"
    my inspecter(lechemin)
end tell

tell application "Finder"
    my inspecter(lechemin)
end tell

on inspecter(lechemin)
    tell application "Finder"
        -- traitement des fichiers :
        set les_fichiers to files of lechemin
        repeat with chaque_fichier in les_fichiers
            -- traitement d'un fichier
            tell application "Finder"
                try
                    set lefichier to chaque_fichier
                    set AppleScript's text item delimiters to {""}
                    set nom to name of chaque_fichier --récupère le nom du fichier
                    set extens to file nom in lechemin --recupere l extension du fichier
                    set lextension to name extension of extens
                    if lextension is not "" then
                        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 nom
                        set nomcourt to (items 1 thru -2 of elements) as string
                        set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
                    else
                        set nomcourt to nom
                    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 "Le nom du fichier n'a pas pu être extrait : " & lefichier & return to lelog starting at eof
                    close access lelog
                end try
                set pourerreur to lefichier as string
                set nouveaunom to my remplace(nomcourt, pourerreur)
          
                if nomcourt is not nouveaunom then
                    try
                        set a to container of lefichier as string
                        set verifexist to a & nouveaunom & "." & lextension
                        if exists verifexist then
                            set nouveaunom to nouveaunom & "2"
                        end if
                        if lextension = "" then
                            set name of lefichier to nouveaunom
                        else
                            set name of lefichier to nouveaunom & "." & lextension -- renomme le fichier
                        end if
                        -- Ecrit un fichier erreur sur le bureau si erreur
                    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 n'a pas pu être renommer : " & pourerreur & return to lelog starting at eof
                        close access lelog
                    end try
                end if
          
            end tell
        end repeat
  
        set a to container of lechemin as string
        set aa to lechemin as string
        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 nomcourt to (text item -2 of aa) as string
        set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
        set pourerreur to aa
  
        set nouveaunom to my remplace(nomcourt, pourerreur)
  
        if nomcourt is not nouveaunom then
            try
                set verifexist to a & nouveaunom
                if exists verifexist then
                    set nouveaunom to nouveaunom & "2"
                end if
                set name of lechemin to nouveaunom --renomme dossier
                set lechemin to a & nouveaunom as alias --reconstruit le chemin pour dossier suivant
            on error
                -- Ecrit un fichier erreur sur le bureau si erreur
                set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                write "Le dossier n'a pas pu être reenommer : " & pourerreur & return to lelog starting at eof
                close access lelog
            end try
        end if
  
        -- traitement des dossiers :
        set les_dossiers to folders of lechemin
        repeat with chaque_dossier in les_dossiers
            -- traitement d'un dossier
            my inspecter(chaque_dossier)
        end repeat
    end tell
end inspecter

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

on remplace(mavar, pourerreur)
    set aremplacer to {203, 231, 229, 136, 128, 129, 136, 135, 137, 136, 138, 140, 241, 238, 239, 205, 133, 152, 151, 153, 155, 154, 233, 131, 230, 232, 143, 142, 144, 145, 130, 141, 237, 234, 235, 236, 147, 146, 148, 149, 244, 242, 243, 134, 157, 156, 158, 159, 216, 132, 150, 40, 41, 91, 93, 123, 125, 47, 37, 64, 35, 34, 44, 59, 63, 33, 46, 92, 62, 60, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90}
    set par to {97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 101, 101, 101, 101, 101, 101, 101, 101, 99, 99, 105, 105, 105, 105, 105, 105, 105, 105, 117, 117, 117, 117, 117, 117, 117, 117, 121, 110, 110, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 95, 95, 45, 45, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122}
    set nbar to count aremplacer
    set new to mavar
 
    set lesblancs to count character in new
    repeat --supprime espace fin
        if character lesblancs of new is not " " then
            exit repeat
        end if
        set new to text 1 thru (lesblancs - 1) of new
        set lesblancs to count characters in new
    end repeat
    repeat --supprime espace debut
        if character 1 of new is not " " then
            exit repeat
        end if
        set new to text 2 thru lesblancs of new
        set lesblancs to count characters in new
    end repeat
    -- remplace les espaces par des tirets
    set nb to count characters in new
    repeat with i from 1 to nb
        if character i of new is " " then
            set new to text 1 thru (i - 1) of new & "-" & text (i + 1) thru nb of new
        end if
    end repeat
    set nb to count characters in new
    set i to 1
    --supprime les tirets qui se suivent
    repeat
        if character i of new is "-" then
            if character (i + 1) of new is "-" then
                set new to text 1 thru (i - 1) of new & text (i + 1) thru nb of new
                set nb to nb - 1
                set i to i - 1
            end if
        end if
        set i to i + 1
        if i = nb then exit repeat
    end repeat
    -- remplace les caractères de la liste
    set nb to count characters in new
    set mavar to new
    try
        repeat with i from 1 to nb
            set a to character i in mavar
            set lavaleur to ASCII number a
            repeat with j from 1 to nbar
                if item j of aremplacer is lavaleur then
                    if lavaleur = 60 or lavaleur = 62 then --traite le ><
                        if i = 1 then
                            set new to (text 2 thru nb of mavar)
                            set avant to ""
                        else
                            set avant to text 1 thru (i - 1) of new
                        end if
                        if i = nb then
                            set new to avant
                        else
                            set new to avant & text nb thru -(nb - i) of mavar
                        end if
                  
                    else --traite les autres caracteres
                        set newcar to ASCII character (item j of par)
                        if i = 1 then
                            set new to newcar & (text 2 thru nb of new)
                            set avant to ""
                        else
                            set avant to text 1 thru (i - 1) of new
                        end if
                        if i = nb then
                            set new to avant & newcar
                        else
                            set new to avant & newcar & text nb thru -(nb - i) of mavar
                        end if
                    end if
                end if
            end repeat
        end repeat
    on error
        -- Ecrit un fichier erreur sur le bureau si erreur
        set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
        write "Le caractère n'a pas pu être remplacer : " & pourerreur & return to lelog starting at eof
        close access lelog
    end try
    set mavar to new
end remplace
```


----------



## zeltron54 (3 Décembre 2021)

Suite du post (Trop long en 1 fois !)

Pour utiliser ce script il faut:
Ouvrir Editeur de script qui se trouve dans Application—>Utilitaires
Clic sur le bouton “Nouveau document” en bas à gauche
Dans la fenêtre qui s’ouvre faire un copier coller du script.
Puis l'exécuter en cliquant sur le bouton en haut à gauche.
 
Le script demande de choisir le dossier contenant les fichiers à traiter, il traite tous les fichiers du dossier et des sous dossiers y compris les noms  de dossier et de ses sous dossiers. S'il rencontre une erreur il crée un fichier texte "les erreurs.txt" sur le bureau avec 1 erreur par ligne.
il met un message lorsqu'il a terminé.

Dis moi si tout fonctionne comme tu veux ?


----------



## zeltron54 (4 Décembre 2021)

Bonjour,
Je te remets un nouveau script, L'ancien avait une erreur si le nom du fichier commençait par plusieurs tirets.


```
-- renomme les fichiers et les dossiers en supprimant les caractères spéciaux
--ÀÁÂàÄÅàáâàäåÒÓÔÕÖòóôõöÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ()[]{}/%@#",;?!.\>< (majuscule par minuscule)
--AAAaAAaaaaaaOOOOOoooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn---------------__--
tell application "Finder"
    set lechemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers et dossiers à traiter"
    my inspecter(lechemin)
end tell

tell application "Finder"
    my inspecter(lechemin)
end tell

on inspecter(lechemin)
    tell application "Finder"
        -- traitement des fichiers :
        set les_fichiers to files of lechemin
        repeat with chaque_fichier in les_fichiers
            -- traitement d'un fichier
            tell application "Finder"
                try
                    set lefichier to chaque_fichier
                    set AppleScript's text item delimiters to {""}
                    set nom to name of chaque_fichier --récupère le nom du fichier
                    set extens to file nom in lechemin --recupere l extension du fichier
                    set lextension to name extension of extens
                    if lextension is not "" then
                        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 nom
                        set nomcourt to (items 1 thru -2 of elements) as string
                        set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
                    else
                        set nomcourt to nom
                    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 "Le nom du fichier n'a pas pu être extrait : " & lefichier & return to lelog starting at eof
                    close access lelog
                end try
                set pourerreur to lefichier as string
                set nouveaunom to my remplace(nomcourt, pourerreur)
                
                if nomcourt is not nouveaunom then
                    try
                        set a to container of lefichier as string
                        set verifexist to a & nouveaunom & "." & lextension
                        if exists verifexist then
                            set nouveaunom to nouveaunom & "2"
                        end if
                        if lextension = "" then
                            set name of lefichier to nouveaunom
                        else
                            set name of lefichier to nouveaunom & "." & lextension -- renomme le fichier
                        end if
                        -- Ecrit un fichier erreur sur le bureau si erreur
                    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 n'a pas pu être renommer : " & pourerreur & return to lelog starting at eof
                        close access lelog
                    end try
                end if
                
            end tell
        end repeat
        
        set a to container of lechemin as string
        set aa to lechemin as string
        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 nomcourt to (text item -2 of aa) as string
        set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
        set pourerreur to aa
        
        set nouveaunom to my remplace(nomcourt, pourerreur)
        
        if nomcourt is not nouveaunom then
            try
                set verifexist to a & nouveaunom
                if exists verifexist then
                    set nouveaunom to nouveaunom & "2"
                end if
                set name of lechemin to nouveaunom --renomme dossier
                set lechemin to a & nouveaunom as alias --reconstruit le chemin pour dossier suivant
            on error
                -- Ecrit un fichier erreur sur le bureau si erreur
                set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                write "Le dossier n'a pas pu être reenommer : " & pourerreur & return to lelog starting at eof
                close access lelog
            end try
        end if
        
        -- traitement des dossiers :
        set les_dossiers to folders of lechemin
        repeat with chaque_dossier in les_dossiers
            -- traitement d'un dossier
            my inspecter(chaque_dossier)
        end repeat
    end tell
end inspecter

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

on remplace(mavar, pourerreur)
    set aremplacer to {203, 231, 229, 136, 128, 129, 136, 135, 137, 136, 138, 140, 241, 238, 239, 205, 133, 152, 151, 153, 155, 154, 233, 131, 230, 232, 143, 142, 144, 145, 130, 141, 237, 234, 235, 236, 147, 146, 148, 149, 244, 242, 243, 134, 157, 156, 158, 159, 216, 132, 150, 40, 41, 91, 93, 123, 125, 47, 37, 64, 35, 34, 44, 59, 63, 33, 46, 92, 62, 60, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90}
    set par to {97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 101, 101, 101, 101, 101, 101, 101, 101, 99, 99, 105, 105, 105, 105, 105, 105, 105, 105, 117, 117, 117, 117, 117, 117, 117, 117, 121, 110, 110, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 95, 95, 45, 45, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122}
    set nbar to count aremplacer
    set new to mavar
    
    set lesblancs to count character in new
    repeat --supprime espace fin
        if character lesblancs of new is not " " then
            exit repeat
        end if
        set new to text 1 thru (lesblancs - 1) of new
        set lesblancs to count characters in new
    end repeat
    repeat --supprime espace debut
        if character 1 of new is not " " then
            exit repeat
        end if
        set new to text 2 thru lesblancs of new
        set lesblancs to count characters in new
    end repeat
    -- remplace les espaces par des tirets
    set nb to count characters in new
    repeat with i from 1 to nb
        if character i of new is " " then
            set new to text 1 thru (i - 1) of new & "-" & text (i + 1) thru nb of new
        end if
    end repeat
    set nb to count characters in new
    set i to 1
    --supprime les tirets qui se suivent
    repeat
        if character i of new is "-" then
            if character (i + 1) of new is "-" then
                if i = 1 then
                    set new to text 2 thru nb of new
                    set nb to nb - 1
                    set i to i - 1
                else
                    set new to text 1 thru (i - 1) of new & text (i + 1) thru nb of new
                    set nb to nb - 1
                    set i to i - 1
                end if
            end if
        end if
        set i to i + 1
        if i = nb then exit repeat
    end repeat
    -- remplace les caractères de la liste
    set nb to count characters in new
    set mavar to new
    try
        repeat with i from 1 to nb
            set a to character i in mavar
            set lavaleur to ASCII number a
            repeat with j from 1 to nbar
                if item j of aremplacer is lavaleur then
                    if lavaleur = 60 or lavaleur = 62 then --traite le ><
                        if i = 1 then
                            set new to (text 2 thru nb of mavar)
                            set avant to ""
                        else
                            set avant to text 1 thru (i - 1) of new
                        end if
                        if i = nb then
                            set new to avant
                        else
                            set new to avant & text nb thru -(nb - i) of mavar
                        end if
                        
                    else --traite les autres caracteres
                        set newcar to ASCII character (item j of par)
                        if i = 1 then
                            set new to newcar & (text 2 thru nb of new)
                            set avant to ""
                        else
                            set avant to text 1 thru (i - 1) of new
                        end if
                        if i = nb then
                            set new to avant & newcar
                        else
                            set new to avant & newcar & text nb thru -(nb - i) of mavar
                        end if
                    end if
                end if
            end repeat
        end repeat
    on error
        -- Ecrit un fichier erreur sur le bureau si erreur
        set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
        write "Le caractère n'a pas pu être remplacer : " & pourerreur & return to lelog starting at eof
        close access lelog
    end try
    set mavar to new
end remplace
```


----------



## zeltron54 (4 Décembre 2021)

Bonsoir,

J'avais voulu trop bien faire en renommant les fichiers et les dossiers... Mais une erreur se produit lors du renommage des dossiers.
Il faudra que je cherche pour résoudre ce Bug.
En attendant je te mets le script qui ne renomme que les fichiers...


```
-- renomme les fichiers en supprimant les caractères spéciaux
--ÀÁÂàÄÅàáâàäåÒÓÔÕÖòóôõöÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ()[]{}/%@#",;?!.\>< (majuscule par minuscule)
--AAAaAAaaaaaaOOOOOoooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn---------------__--
tell application "Finder"
    set lechemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers et dossiers à traiter"
    my inspecter(lechemin)
end tell

tell application "Finder"
    my inspecter(lechemin)
end tell

on inspecter(lechemin)
    tell application "Finder"
        -- traitement des fichiers :
        set les_fichiers to files of lechemin
        repeat with chaque_fichier in les_fichiers
            -- traitement d'un fichier
            tell application "Finder"
                try
                    set lefichier to chaque_fichier
                    set AppleScript's text item delimiters to {""}
                    set nom to name of chaque_fichier --récupère le nom du fichier
                    set extens to file nom in lechemin --recupere l extension du fichier
                    set lextension to name extension of extens
                    if lextension is not "" then
                        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 nom
                        set nomcourt to (items 1 thru -2 of elements) as string
                        set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
                    else
                        set nomcourt to nom
                    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 "Le nom du fichier n'a pas pu être extrait : " & lefichier & return to lelog starting at eof
                    close access lelog
                end try
                set pourerreur to lefichier as string
                set nouveaunom to my remplace(nomcourt, pourerreur)
                
                if nomcourt is not nouveaunom then
                    try
                        set a to container of lefichier as string
                        set verifexist to a & nouveaunom & "." & lextension
                        if exists verifexist then
                            set nouveaunom to nouveaunom & "2"
                        end if
                        if lextension = "" then
                            set name of lefichier to nouveaunom
                        else
                            set name of lefichier to nouveaunom & "." & lextension -- renomme le fichier
                        end if
                        -- Ecrit un fichier erreur sur le bureau si erreur
                    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 n'a pas pu être renommer : " & pourerreur & return to lelog starting at eof
                        close access lelog
                    end try
                end if
                
            end tell
        end repeat
        
        
        -- traitement des dossiers :
        set les_dossiers to folders of lechemin
        repeat with chaque_dossier in les_dossiers
            -- traitement d'un dossier
            my inspecter(chaque_dossier)
        end repeat
    end tell
end inspecter

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

on remplace(mavar, pourerreur)
    set aremplacer to {203, 231, 229, 136, 128, 129, 136, 135, 137, 136, 138, 140, 241, 238, 239, 205, 133, 152, 151, 153, 155, 154, 233, 131, 230, 232, 143, 142, 144, 145, 130, 141, 237, 234, 235, 236, 147, 146, 148, 149, 244, 242, 243, 134, 157, 156, 158, 159, 216, 132, 150, 40, 41, 91, 93, 123, 125, 47, 37, 64, 35, 34, 44, 59, 63, 33, 46, 92, 62, 60, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90}
    set par to {97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 101, 101, 101, 101, 101, 101, 101, 101, 99, 99, 105, 105, 105, 105, 105, 105, 105, 105, 117, 117, 117, 117, 117, 117, 117, 117, 121, 110, 110, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 95, 95, 45, 45, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122}
    set nbar to count aremplacer
    set new to mavar
    
    set lesblancs to count character in new
    repeat --supprime espace fin
        if character lesblancs of new is not " " then
            exit repeat
        end if
        set new to text 1 thru (lesblancs - 1) of new
        set lesblancs to count characters in new
    end repeat
    repeat --supprime espace debut
        if character 1 of new is not " " then
            exit repeat
        end if
        set new to text 2 thru lesblancs of new
        set lesblancs to count characters in new
    end repeat
    -- remplace les espaces par des tirets
    set nb to count characters in new
    repeat with i from 1 to nb
        if character i of new is " " then
            set new to text 1 thru (i - 1) of new & "-" & text (i + 1) thru nb of new
        end if
    end repeat
    set nb to count characters in new
    set i to 1
    --supprime les tirets qui se suivent
    repeat
        if character i of new is "-" then
            if character (i + 1) of new is "-" then
                if i = 1 then
                    set new to text 2 thru nb of new
                    set nb to nb - 1
                    set i to i - 1
                else
                    set new to text 1 thru (i - 1) of new & text (i + 1) thru nb of new
                    set nb to nb - 1
                    set i to i - 1
                end if
            end if
        end if
        set i to i + 1
        if i = nb then exit repeat
    end repeat
    -- remplace les caractères de la liste
    set nb to count characters in new
    set mavar to new
    try
        repeat with i from 1 to nb
            set a to character i in mavar
            set lavaleur to ASCII number a
            repeat with j from 1 to nbar
                if item j of aremplacer is lavaleur then
                    if lavaleur = 60 or lavaleur = 62 then --traite le ><
                        if i = 1 then
                            set new to (text 2 thru nb of mavar)
                            set avant to ""
                        else
                            set avant to text 1 thru (i - 1) of new
                        end if
                        if i = nb then
                            set new to avant
                        else
                            set new to avant & text nb thru -(nb - i) of mavar
                        end if
                        
                    else --traite les autres caracteres
                        set newcar to ASCII character (item j of par)
                        if i = 1 then
                            set new to newcar & (text 2 thru nb of new)
                            set avant to ""
                        else
                            set avant to text 1 thru (i - 1) of new
                        end if
                        if i = nb then
                            set new to avant & newcar
                        else
                            set new to avant & newcar & text nb thru -(nb - i) of mavar
                        end if
                    end if
                end if
            end repeat
        end repeat
    on error
        -- Ecrit un fichier erreur sur le bureau si erreur
        set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
        write "Le caractère n'a pas pu être remplacer : " & pourerreur & return to lelog starting at eof
        close access lelog
    end try
    set mavar to new
end remplace
```


----------



## zeltron54 (5 Décembre 2021)

Bonjour,

Nouveau script qui renomme fichiers et dossiers (Bug corrigé !), il reste quelques cas (tourdus) genre nom commençant par " # -le nom" qui vont se retrouver commençant par "---", pour résoudre ces cas trés rares il suffit de relancer le script une deuxième fois.
Bon tests...
J'attends ton retour !


```
-- renomme les fichiers et les dossiers en supprimant les caractères spéciaux
--ÀÁÂàÄÅàáâàäåÒÓÔÕÖòóôõöÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ()[]{}/%@#",;?!.\>< (majuscule par minuscule)
--AAAaAAaaaaaaOOOOOoooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn---------------__--
tell application "Finder"
    set lechemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers et dossiers à traiter"
end tell

tell application "Finder"
    my inspecter(lechemin)
end tell

on inspecter(lechemin)
    tell application "Finder"
        -- traitement des fichiers :
        set les_fichiers to files of lechemin
        repeat with chaque_fichier in les_fichiers
            -- traitement d'un fichier
            tell application "Finder"
                try
                    set lefichier to chaque_fichier
                    set AppleScript's text item delimiters to {""}
                    set nom to name of chaque_fichier --récupère le nom du fichier
                    set extens to file nom in lechemin --recupere l extension du fichier
                    set lextension to name extension of extens
                    if lextension is not "" then
                        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 nom
                        set nomcourt to (items 1 thru -2 of elements) as string
                        set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
                    else
                        set nomcourt to nom
                    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 "Le nom du fichier n'a pas pu être extrait : " & lefichier & return to lelog starting at eof
                    close access lelog
                end try
                set pourerreur to lefichier as string
                set nouveaunom to my remplace(nomcourt, pourerreur)
                if nomcourt is not nouveaunom then
                    try
                        set a to container of lefichier as string
                        set verifexist to a & nouveaunom & "." & lextension
                        if exists verifexist then
                            set nouveaunom to nouveaunom & "2"
                        end if
                        if lextension = "" then
                            set name of lefichier to nouveaunom
                        else
                            set name of lefichier to nouveaunom & "." & lextension -- renomme le fichier
                        end if
                        -- Ecrit un fichier erreur sur le bureau si erreur
                    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 n'a pas pu être renommer : " & pourerreur & return to lelog starting at eof
                        close access lelog
                    end try
                end if
               
            end tell
        end repeat
       
        set a to container of lechemin as string
        set aa to lechemin as string
        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 nomcourt to (text item -2 of aa) as string
        set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
        set pourerreur to aa
        set nouveaunom to my remplace(nomcourt, pourerreur)
        if nomcourt is not nouveaunom then
            try
                set verifexist to a & nouveaunom
                if exists verifexist then
                    set nouveaunom to nouveaunom & "2"
                end if
                set name of lechemin to nouveaunom --renomme dossier
                set lechemin to a & nouveaunom as alias --reconstruit le chemin pour dossier suivant
            on error
                -- Ecrit un fichier erreur sur le bureau si erreur
                set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                write "Le dossier n'a pas pu être reenommer : " & pourerreur & return to lelog starting at eof
                close access lelog
            end try
        end if
       
        -- traitement des dossiers :
        set les_dossiers to folders of lechemin
        repeat with chaque_dossier in les_dossiers
            -- traitement d'un dossier
            my inspecter(chaque_dossier)
        end repeat
    end tell
end inspecter

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

on remplace(mavar, pourerreur)
    set aremplacer to {203, 231, 229, 136, 128, 129, 136, 135, 137, 136, 138, 140, 241, 238, 239, 205, 133, 152, 151, 153, 155, 154, 233, 131, 230, 232, 143, 142, 144, 145, 130, 141, 237, 234, 235, 236, 147, 146, 148, 149, 244, 242, 243, 134, 157, 156, 158, 159, 216, 132, 150, 40, 41, 91, 93, 123, 125, 47, 37, 64, 35, 34, 44, 59, 63, 33, 46, 92, 62, 60, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90}
    set par to {97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 101, 101, 101, 101, 101, 101, 101, 101, 99, 99, 105, 105, 105, 105, 105, 105, 105, 105, 117, 117, 117, 117, 117, 117, 117, 117, 121, 110, 110, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 95, 95, 45, 45, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122}
    set nbar to count aremplacer
    set new to mavar
   
    set lesblancs to count character in new
    repeat --supprime espace fin
        if character lesblancs of new is not " " then
            exit repeat
        end if
        set new to text 1 thru (lesblancs - 1) of new
        set lesblancs to count characters in new
    end repeat
    repeat --supprime espace debut
        if character 1 of new is not " " then
            exit repeat
        end if
        set new to text 2 thru lesblancs of new
        set lesblancs to count characters in new
    end repeat
    -- remplace les espaces par des tirets
    set nb to count characters in new
    repeat with i from 1 to nb
        if character i of new is " " then
            set new to text 1 thru (i - 1) of new & "-" & text (i + 1) thru nb of new
        end if
    end repeat
    set nb to count characters in new
    set i to 1
    --supprime les tirets qui se suivent
    repeat
        if character i of new is "-" then
            if character (i + 1) of new is "-" then
                if i = 1 then
                    set new to text 2 thru nb of new
                    set nb to nb - 1
                    set i to i - 1
                else
                    set new to text 1 thru (i - 1) of new & text (i + 1) thru nb of new
                    set nb to nb - 1
                    set i to i - 1
                end if
            end if
        end if
        set i to i + 1
        if i = nb then exit repeat
    end repeat
    -- remplace les caractères de la liste
    set nb to count characters in new
    set mavar to new
    try
        repeat with i from 1 to nb
            set a to character i in mavar
            set lavaleur to ASCII number a
            repeat with j from 1 to nbar
                if item j of aremplacer is lavaleur then
                    if lavaleur = 60 or lavaleur = 62 then --traite le ><
                        if i = 1 then
                            set new to (text 2 thru nb of mavar)
                            set avant to ""
                        else
                            set avant to text 1 thru (i - 1) of new
                        end if
                        if i = nb then
                            set new to avant
                        else
                            set new to avant & text nb thru -(nb - i) of mavar
                        end if
                       
                    else --traite les autres caracteres
                        set newcar to ASCII character (item j of par)
                        if i = 1 then
                            set new to newcar & (text 2 thru nb of new)
                            set avant to ""
                        else
                            set avant to text 1 thru (i - 1) of new
                        end if
                        if i = nb then
                            set new to avant & newcar
                        else
                            set new to avant & newcar & text nb thru -(nb - i) of mavar
                        end if
                    end if
                end if
            end repeat
        end repeat
    on error
        -- Ecrit un fichier erreur sur le bureau si erreur
        set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
        write "Le caractère n'a pas pu être remplacer : " & pourerreur & return to lelog starting at eof
        close access lelog
    end try
    set mavar to new
end remplace
```


----------



## Pam (5 Décembre 2021)

Waouh, c'est énorme comme travail !!! Merci à toi Zeltron. Je vais essayer ça et je te ferai un retour. Encore merci !


----------



## zeltron54 (5 Décembre 2021)

Bon j'ai résolu le problème des cas tordus qui nécessitaient une deuxième passe...
Voilà le nouveau script:

Bon tests !


```
-- renomme les fichiers et les dossiers en supprimant les caractères spéciaux
--ÀÁÂàÄÅàáâàäåÒÓÔÕÖòóôõöÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ()[]{}/%@#",;?!.\>< (majuscule par minuscule)
--AAAaAAaaaaaaOOOOOoooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn---------------__--
tell application "Finder"
    set lechemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers et dossiers à traiter"
end tell

tell application "Finder"
    my inspecter(lechemin)
end tell

on inspecter(lechemin)
    tell application "Finder"
        -- traitement des fichiers :
        set les_fichiers to files of lechemin
        repeat with chaque_fichier in les_fichiers
            -- traitement d'un fichier
            tell application "Finder"
                try
                    set lefichier to chaque_fichier
                    set AppleScript's text item delimiters to {""}
                    set nom to name of chaque_fichier --récupère le nom du fichier
                    set extens to file nom in lechemin --recupere l extension du fichier
                    set lextension to name extension of extens
                    if lextension is not "" then
                        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 nom
                        set nomcourt to (items 1 thru -2 of elements) as string
                        set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
                    else
                        set nomcourt to nom
                    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 "Le nom du fichier n'a pas pu être extrait : " & lefichier & return to lelog starting at eof
                    close access lelog
                end try
                set pourerreur to lefichier as string
                set nouveaunom to my remplace(nomcourt, pourerreur)
                if nomcourt is not nouveaunom then
                    try
                        set a to container of lefichier as string
                        set verifexist to a & nouveaunom & "." & lextension
                        if exists verifexist then
                            set nouveaunom to nouveaunom & "2"
                        end if
                        if lextension = "" then
                            set name of lefichier to nouveaunom
                        else
                            set name of lefichier to nouveaunom & "." & lextension -- renomme le fichier
                        end if
                        -- Ecrit un fichier erreur sur le bureau si erreur
                    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 n'a pas pu être renommer : " & pourerreur & return to lelog starting at eof
                        close access lelog
                    end try
                end if
                
            end tell
        end repeat
        
        set a to container of lechemin as string
        set aa to lechemin as string
        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 nomcourt to (text item -2 of aa) as string
        set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
        set pourerreur to aa
        set nouveaunom to my remplace(nomcourt, pourerreur)
        if nomcourt is not nouveaunom then
            try
                set verifexist to a & nouveaunom
                if exists verifexist then
                    set nouveaunom to nouveaunom & "2"
                end if
                set name of lechemin to nouveaunom --renomme dossier
                set lechemin to a & nouveaunom as alias --reconstruit le chemin pour dossier suivant
            on error
                -- Ecrit un fichier erreur sur le bureau si erreur
                set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                write "Le dossier n'a pas pu être reenommer : " & pourerreur & return to lelog starting at eof
                close access lelog
            end try
        end if
        
        -- traitement des dossiers :
        set les_dossiers to folders of lechemin
        repeat with chaque_dossier in les_dossiers
            -- traitement d'un dossier
            my inspecter(chaque_dossier)
        end repeat
    end tell
end inspecter

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

on remplace(mavar, pourerreur)
    set aremplacer to {203, 231, 229, 136, 128, 129, 136, 135, 137, 136, 138, 140, 241, 238, 239, 205, 133, 152, 151, 153, 155, 154, 233, 131, 230, 232, 143, 142, 144, 145, 130, 141, 237, 234, 235, 236, 147, 146, 148, 149, 244, 242, 243, 134, 157, 156, 158, 159, 216, 132, 150, 40, 41, 91, 93, 123, 125, 47, 37, 64, 35, 34, 44, 59, 63, 33, 46, 92, 62, 60, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90}
    set par to {97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 101, 101, 101, 101, 101, 101, 101, 101, 99, 99, 105, 105, 105, 105, 105, 105, 105, 105, 117, 117, 117, 117, 117, 117, 117, 117, 121, 110, 110, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 95, 95, 45, 45, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122}
    set nbar to count aremplacer
    set new to mavar
    
    set lesblancs to count character in new
    repeat --supprime espace fin
        if character lesblancs of new is not " " then
            exit repeat
        end if
        set new to text 1 thru (lesblancs - 1) of new
        set lesblancs to count characters in new
    end repeat
    repeat --supprime espace debut
        if character 1 of new is not " " then
            exit repeat
        end if
        set new to text 2 thru lesblancs of new
        set lesblancs to count characters in new
    end repeat
    -- remplace les espaces par des tirets
    set nb to count characters in new
    repeat with i from 1 to nb
        if character i of new is " " then
            set new to text 1 thru (i - 1) of new & "-" & text (i + 1) thru nb of new
        end if
    end repeat
    set nb to count characters in new
    
    -- remplace les caractères de la liste
    set nb to count characters in new
    set mavar to new
    try
        repeat with i from 1 to nb
            set a to character i in mavar
            set lavaleur to ASCII number a
            repeat with j from 1 to nbar
                if item j of aremplacer is lavaleur then
                    if lavaleur = 60 or lavaleur = 62 then --traite le ><
                        if i = 1 then
                            set new to (text 2 thru nb of mavar)
                            set avant to ""
                        else
                            set avant to text 1 thru (i - 1) of new
                        end if
                        if i = nb then
                            set new to avant
                        else
                            set new to avant & text nb thru -(nb - i) of mavar
                        end if
                        
                    else --traite les autres caracteres
                        set newcar to ASCII character (item j of par)
                        if i = 1 then
                            set new to newcar & (text 2 thru nb of new)
                            set avant to ""
                        else
                            set avant to text 1 thru (i - 1) of new
                        end if
                        if i = nb then
                            set new to avant & newcar
                        else
                            set new to avant & newcar & text nb thru -(nb - i) of mavar
                        end if
                    end if
                end if
            end repeat
        end repeat
    on error
        -- Ecrit un fichier erreur sur le bureau si erreur
        set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
        write "Le caractère n'a pas pu être remplacer : " & pourerreur & return to lelog starting at eof
        close access lelog
    end try
    set i to 1
    --supprime les tirets qui se suivent
    repeat
        if character i of new is "-" then
            if character (i + 1) of new is "-" then
                if i = 1 then
                    set new to text 2 thru nb of new
                    set nb to nb - 1
                    set i to i - 1
                else
                    set new to text 1 thru (i - 1) of new & text (i + 1) thru nb of new
                    set nb to nb - 1
                    set i to i - 1
                end if
            end if
        end if
        set i to i + 1
        if i = nb then exit repeat
    end repeat
    set mavar to new
end remplace
```


----------



## Pam (6 Décembre 2021)

Super ! Merci beaucoup !
Je me posais une question : est-ce qu'il y a un risque en utilisant un script comme ça pour renommer des fichiers de "corrompre" les fichiers en question (de les modifier ou de provoquer un bug à leur ouverture, par exemple) ?


----------



## zeltron54 (6 Décembre 2021)

Non pas de risque, le script ne fait que de renommer les fichiers et les dossiers comme tu pourrais le faire à la main...

Pour se servir de ce script , penses à relire le  post #13 qui explique comment l' utiliser.


----------



## Pam (7 Décembre 2021)

Entendu, merci beaucoup. J'avoue que je ne m'attendais pas à qqch d'aussi complexe et j'imagine que cela a dû te prendre un temps considérable. 
Je n'ose pas trop encore me lancer... Mais je regarderai tout ça à tête reposée le week-end prochain.


----------



## zeltron54 (8 Décembre 2021)

Bonjour,

Te peux faire ton renommage sans craintes...

Si cela peut te rassurer, tu fais une copie d'un dossier avec quelques fichiers à renommer dedans et tu fais un test sur ce dossier...

Juste à patienter que le script te mette le message comme quoi il a terminé... ce qui peut être long si il y a beaucoup de fichiers (chez moi un test  sur 120 fichiers dans 10 sous dossiers à pris 8 sec !  )


----------



## Pam (11 Décembre 2021)

Well, ça me stresse un peu d'utiliser ce script, mais j'ai un ami qui va s'occuper de ça 
Merci encore !


----------



## zeltron54 (11 Décembre 2021)

Bonjour,

Cool ! Pas de stress.... Tu suis bien le mode d'emploi .
Commence par faire un essai sur une copie d'un petit dossier...
Si tu as le moindre doute, n'hésites pas tu postes ici, on te guidera...


----------

