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

Cri_fra

Membre enregistré
18 Novembre 2020
5
0
50
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.

Capture d’écran 2020-11-18 à 17.02.52.jpg Capture d’écran 2020-11-18 à 17.02.29.jpg
 
Dernière édition par un modérateur:

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 402
377
Lorraine
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

Membre enregistré
18 Novembre 2020
5
0
50
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

Membre expert
Club MacG
29 Mars 2008
2 402
377
Lorraine
oui s'il y en a plusieurs, lorsque on va renommer le 2ieme , le nom existera déja, donc erreur.
 

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 402
377
Lorraine
OK !
Alors essai ce script et dis moi si cela te convient.

Bloc de code:
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

Membre enregistré
18 Novembre 2020
5
0
50
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

Membre expert
Club MacG
29 Mars 2008
2 402
377
Lorraine
Alors voilà les changements

dis moi si c'est bon pour toi .

Bloc de code:
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

Membre enregistré
18 Novembre 2020
5
0
50
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.

Capture d’écran 2020-11-18 à 21.59.27.jpg
 
Dernière édition par un modérateur:

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 402
377
Lorraine
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

Une muse sur la toile
26 Septembre 2021
13
1
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

Membre expert
Club MacG
29 Mars 2008
2 402
377
Lorraine
@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 !

Bloc de code:
-- 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
 
Dernière édition:

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 402
377
Lorraine
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 ?
 
Dernière édition:

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 402
377
Lorraine
Bonjour,
Je te remets un nouveau script, L'ancien avait une erreur si le nom du fichier commençait par plusieurs tirets.

Bloc de code:
-- 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

Membre expert
Club MacG
29 Mars 2008
2 402
377
Lorraine
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...

Bloc de code:
-- 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

Membre expert
Club MacG
29 Mars 2008
2 402
377
Lorraine
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 !

Bloc de code:
-- 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
 
Dernière édition:

Pam

Une muse sur la toile
26 Septembre 2021
13
1
Waouh, c'est énorme comme travail !!! Merci à toi Zeltron. Je vais essayer ça et je te ferai un retour. Encore merci !
 

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 402
377
Lorraine
Bon j'ai résolu le problème des cas tordus qui nécessitaient une deuxième passe...
Voilà le nouveau script:

Bon tests !

Bloc de code:
-- 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

Une muse sur la toile
26 Septembre 2021
13
1
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

Membre expert
Club MacG
29 Mars 2008
2 402
377
Lorraine
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.