Recherche de caractères spéciaux à la volée ?

Ca fonctionne !!! :D
Alors premiers retours.

Il y a des occurrences dans l'impossibilité de synchroniser sur OneDrive que nous n'avions pas envisagées :
Le script se bloque si il rencontre :
  • Un point dans un titre de dossier au milieu ou en fin [abréviation])
  • Un espace en début ou en fin de nom de dossier
  • Si plusieurs tirets dans des noms de fichiers (-- ou ---)
  • Fichiers (et fichiers polices) sans extension

Capture d’écran 2021-11-08 à 10.51.41.jpg Capture d’écran 2021-11-08 à 11.04.25.jpg Capture d’écran 2021-11-08 à 11.06.04.jpg
 
Une autre cas que je n'identifie pas...
Peut-être qu'il y a des « ou » dans le script qu'il faudrait remplacer par des « ou/et » ?

Capture d’écran 2021-11-08 à 11.44.50.jpg
 
Ok!
J ´ai vu le bug, c ´est lorsque le nom commence par un caractère à remplacer…
j ´aurai accès à l’ordi d’ici une heure !
je ferai la modif dès que possible …
 
Alors, je vois également qu'il n'y aurait pas les autres les ponctuations, genre virgules, points virgules, 2 points ou points d'interrogation dans la liste des caractères à traiter.
,;:?!
 
Ok je remplace les ,;?! Par des tirets (-) , pour les : non car il ne peuvent pas être dans un nom ;)
J'y ajoute également les "
Et je ne pense pas que les points soient gênant.
 
Dernière édition:
Alors voilà le new script.
J'ai corrigé le bug du 1ere caractère et j'ai ajouté les différents signes (voir la 2ième ligne du script)

Dis moi si tu as des encore des erreurs !

Bloc de code:
-- renomme les fichiers et les dossiers en supprimant les caractères spéciaux
--ÀÁÂàÄÅàáâàäåÒÓÔÕÖòóôõöÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ()[]{}/%@#",;?!
--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"
                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
                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
                
                set nouveaunom to my remplace(nomcourt)
                if nomcourt is not nouveaunom then
                    set name of lefichier to (nouveaunom & "." & lextension) -- renomme le fichier
                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 nouveaunom to my remplace(nomcourt)
        if nomcourt is not nouveaunom then
            set name of lechemin to nouveaunom --renomme dossier
            set lechemin to a & nouveaunom as alias --reconstruit le chemin pour dossier suivant
        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)
    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}
    set par to {65, 65, 65, 97, 65, 65, 97, 97, 97, 97, 97, 97, 79, 79, 79, 79, 79, 111, 111, 111, 111, 111, 69, 69, 69, 69, 101, 101, 101, 101, 67, 99, 73, 73, 73, 73, 105, 105, 105, 105, 85, 85, 85, 85, 117, 117, 117, 117, 121, 78, 110, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45}
    set nbar to count aremplacer
    set nb to count characters in mavar
    set new to mavar
    repeat with i from 1 to nb
        set a to character i in new
        set lavaleur to ASCII number a
        repeat with j from 1 to nbar
            if item j of aremplacer is lavaleur then
                set newcar to ASCII character (item j of par)
                if i = 1 then
                    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 repeat
    end repeat
    set mavar to new
end remplace
 
Super ! Merci !!
Les points, ils posent juste problème quand ils se trouvent au beau milieu d'un nom de dossier. Je te dis si j'en rencontre d'autres.
Et ce sont toujours les fontes sans extension qui sont présentes dans les infos rassemblées de certains dossiers.
Et de tels dossiers sont assez fréquents vu que je suis un …assez vieux… graphiste… :siffle:
Tu sais si, à partir du script, je peux localiser le fichier coupable ? Parce que concernant les polices, je peux avoir plusieurs fichiers portant le même nom… mais un seul sera sûrement corrompu ou à problème, nottamment ceux qui pèsent… 0 octet.


Capture d’écran 2021-11-08 à 13.58.14.jpg
 
Je ne comprend pas ce que tu veux dire par "fichier coupable" coupable de quoi ?

si tu parles du fichier qui provoquerai une erreur lors de l'exécution du script je peux regarder, si c'est une erreur lors des synchronisations là !!!

Edit: Tu veux ajouter les points et les remplacer par quoi ? éventuellement un tiret bas ?
 
…De bloquer le script.
Et je ne veux pas ajouter de points non, mais les supprimer, et un tiret bas est parfait.
 
Dernière édition:
Bien alors un nouveau script auquel j'ai ajouté: le point remplacé par un tiret bas.
Et en cas d'erreur rencontrée par le remplacement d'un caractère du nom dans le script ne bloque pas mais continu mais te crée un fichier "erreur.txt" sur le bureau qui contient le chemin du fichier ou dossier ayant causé l'erreur et qui n'a donc pas été traité intégralement.

J'espère avoir répondu à tes demandes ! :D

Bloc de code:
-- renomme les fichiers et les dossiers en supprimant les caractères spéciaux
--ÀÁÂàÄÅàáâàäåÒÓÔÕÖòóôõöÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ()[]{}/%@#",;?!.
--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"
                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
                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
                set pourerreur to lefichier as string
                set nouveaunom to my remplace(nomcourt, pourerreur)
                if nomcourt is not nouveaunom then
                    set name of lefichier to (nouveaunom & "." & lextension) -- renomme le fichier
                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
            set name of lechemin to nouveaunom --renomme dossier
            set lechemin to a & nouveaunom as alias --reconstruit le chemin pour dossier suivant
        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}
    set par to {65, 65, 65, 97, 65, 65, 97, 97, 97, 97, 97, 97, 79, 79, 79, 79, 79, 111, 111, 111, 111, 111, 69, 69, 69, 69, 101, 101, 101, 101, 67, 99, 73, 73, 73, 73, 105, 105, 105, 105, 85, 85, 85, 85, 117, 117, 117, 117, 121, 78, 110, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 95}
    set nbar to count aremplacer
    set nb to count characters in mavar
    set new to mavar
    repeat with i from 1 to nb
        set a to character i in new
        set lavaleur to ASCII number a
        repeat with j from 1 to nbar
            if item j of aremplacer is lavaleur then
                try
                    set newcar to ASCII character (item j of par)
                    if i = 1 then
                        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
                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 nom n'a pas pu être remplacer : " & pourerreur & return to lelog starting at eof
                    close access lelog
                   
                end try
            end if
        end repeat
    end repeat

    set mavar to new
end remplace
 
D'accord et merci. C'est du cousu-main...
Pour les dossiers qui comportent un espace en fin de nom, il y aurait une possibilité de le supprimer complètement ?

Capture d’écran 2021-11-08 à 14.55.02.jpg

J'adorerais le faire moi-même, histoire de prendre le relais…
 
Voila qui enlève tous les espaces en fin de nom (fichier et dossier)

Bloc de code:
-- renomme les fichiers et les dossiers en supprimant les caractères spéciaux
--ÀÁÂàÄÅàáâàäåÒÓÔÕÖòóôõöÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ()[]{}/%@#",;?!.
--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"
                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
                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
                set pourerreur to lefichier as string
                set nouveaunom to my remplace(nomcourt, pourerreur)
                if nomcourt is not nouveaunom then
                    set name of lefichier to (nouveaunom & "." & lextension) -- renomme le fichier
                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
            set name of lechemin to nouveaunom --renomme dossier
            set lechemin to a & nouveaunom as alias --reconstruit le chemin pour dossier suivant
        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}
    set par to {65, 65, 65, 97, 65, 65, 97, 97, 97, 97, 97, 97, 79, 79, 79, 79, 79, 111, 111, 111, 111, 111, 69, 69, 69, 69, 101, 101, 101, 101, 67, 99, 73, 73, 73, 73, 105, 105, 105, 105, 85, 85, 85, 85, 117, 117, 117, 117, 121, 78, 110, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 95}
    set nbar to count aremplacer
    set new to mavar
    
    set lesblancs to count character in new
    repeat
        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
    set nb to count characters in new
    repeat with i from 1 to nb
        set a to character i in new
        set lavaleur to ASCII number a
        repeat with j from 1 to nbar
            if item j of aremplacer is lavaleur then
                try
                    set newcar to ASCII character (item j of par)
                    if i = 1 then
                        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
                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 nom n'a pas pu être remplacer : " & pourerreur & return to lelog starting at eof
                    close access lelog
                    
                end try
            end if
        end repeat
    end repeat
    
    set mavar to new
end remplace
 
Merci Zeltron. Ca va aider car je les faisais tous à la main et il y en a quand même beaucoup.

Mais je ne suis pas certain que le fichier "erreur.txt" soit en fait créé sur le bureau. Je ne le vois nulle part et le script s’interrompt à chaque bug.
(je ne sais pas dans quoi tu t'es fourré là, mais c'est de plus en plus complexe quand même, non ?)
 
le fichier text est créer si bug lors de la modification d'un caractères, pour le reste je n'ai rien prévu.
peux-tu mettre une copie de la fenêtre lors d'un blocage ? afin de voir de quoi cela provient.
éventuellement lors du blocage une ligne du script doit présenter un petit surlignage si tu peux me le mettre celà permettrai de voir le problème.
 
Ce n'est plus du tout le même problème ! pas la même erreur que les précédentes !
je suppose que la ligne surlignée dans le script est "set a to character i in new"
peux-tu me confirmer ?
 
Comme j'avais fermé la fenêtre, je n'arrive pas à générer la même recherche au même e,droit (j'avance dossier par dossier).
J'en remets un autre.
Capture d’écran 2021-11-08 à 17.15.39.jpg

Avec la pharse d'erreur :
error "Impossible de convertir items 1 thru -2 of {\"Prog dimanche 11 juillet 2010\"} en type string." number -1700 from items 1 thru -2 of {"Prog dimanche 11 juillet 2010"} to string

Et depuis le début, le seul truc en surbrillance est « string » :

Capture d’écran 2021-11-08 à 17.17.39.jpg