# Renommer des dossiers, créer des dossiers et déplacer des fichiers  -> applescript



## Mattdu62 (20 Décembre 2022)

Bonjour, 
Je reçois des dossiers natifs de livre dont l'arborescence est comme ci-joint :
Les fichiers clients sont sur un serveur "macintosh HD:Exploitation:COUV NATIF"







J'aimerai avoir au final avec le script une modification comme ci-joint




Renommer automatiquement les dossiers dans "COUV NATIF"
pour ajouter les "-" entre les chiffres
Qu'une boite de dialogue me demande le dernier chiffre à ajouter à l'ISBN
renommer les noms (j'ai trouvé un script pour ça -> mais ça s'applique aussi au dossier parent)
Supprimer le _CV à la fin
Copier le nom obtenu
Créer 3 dossiers vierges et les nommer avec le nouveau nom obtenu et _fl1, _fl2 et _fl3 à la fin...
Mettre le contenu dans le _fl1 et _fl2
Ajouter le fichier pdf "Datamatrix_000.pdf" qui se trouve dans 
"Macintosh HD:Utilisateurs:Societe:Travaux en cours:NOUVEAUTES:GABARITSATAMATRIXATAMATRIX_000.pdf"



J'ai repris le script de renomage : https://forums.macg.co/threads/recherche-de-caracteres-speciaux-a-la-volee.1365583/page-5
Le fichier parent est aussi impacté
mais je ne sais pas encore comment ajouter des "-" entre les chiffre que je veux...

J'arrive à créer des dossiers vierges dans un dossier déjà existant demandé par le script...
mais il faut qu'il s'applique aux sous-dossiers et pas à la racine...
j'utilise une boite de dialogue pour mes recherches mais tout sera automatisé puisque j'utilise des dossiers dédiés à ce travail
*tell* _application_ "Finder"
*    set* lechemin *to* *choose folder* with prompt "Sélectionnez le Dossier principal à traiter ?"
*make* new _folder_ at lechemin with properties {name:"couverture"}
*make* new _folder_ at lechemin with properties {name:"corps-de-livre"}
*end* *tell*

Cordialement
Matt


----------



## zeltron54 (20 Décembre 2022)

Bonjour,

En lisant ta demande, Tu ne parle pas des nouveaux dossiers "Corps-de-livre" et "couverture", faut 'il les créer  ?
L'ensemble des fichiers et dossiers existant dans le dossier original, seront donc dupliqué 2 fois, une fois dans "fl1" et une fois dans "fl2" ou dans le dossier couverture comme le laisse penser ta copie d'écran ?
C'est pas trop clair !...  
Avec ces détails on pourra envisager l'écriture d'un script.


----------



## zeltron54 (20 Décembre 2022)

Je t'ai préparé ce script.
Il te demande de choisir le dossier à traiter
Il te demande le chiffre ISBN
il insère les - dans les chiffres de l'ISBN
il crée un nouveau dossier avec le nom modifié
Il crée les 3 dossiers "fl." et les 2 dossiers "couverture"et "corps de livre"
Il transfère tout le contenu du dossier original dans les dossier Fl."
Il duplique le fichier DATAMATRIX_000.pdf
puis il efface le dossier original.

Dis moi si c'est bien ce que tu voulais !
N'oublies pas de faire des essais sur des copies ( risques puisqu'il efface l'original)


```
tell application "Finder"
   
    set lechemin to choose folder with prompt "Sélectionnez le Dossier principal à traiter ?"
    display dialog "Entrer le chiffre à ajouter à l'ISBN :" default answer ""
    set lechiffre to text returned of result
    set ledossier to name of lechemin
    set isbn to characters 1 thru 3 of ledossier & "-" & character 4 of ledossier & "-" & characters 5 thru 7 of ledossier & "-" & characters 8 thru 12 of ledossier & "-" & lechiffre as text
    set lenomdossier to characters 13 thru -4 of ledossier as text
   
    repeat with i from 1 to count lenomdossier
        if item i of lenomdossier is " " then
            set lenomdossier to items 1 thru (i - 1) of lenomdossier & "-" & items (i + 1) thru -1 of lenomdossier
        end if
    end repeat
    set newnomledossier to isbn & (lenomdossier as text)
   
    set sauv to AppleScript's text item delimiters
    set AppleScript's text item delimiters to {":"}
    set chem to lechemin as string
    set chemin to text items 1 thru -3 of chem as string
    set newchemin to chemin & ":" & newnomledossier
    set AppleScript's text item delimiters to sauv
   
    make new folder at chemin with properties {name:newnomledossier}
    make new folder at newchemin with properties {name:newnomledossier & "_fl1"}
    make new folder at newchemin with properties {name:newnomledossier & "_fl2"}
    make new folder at newchemin with properties {name:newnomledossier & "_fl3"}
    make new folder at newchemin & ":" & newnomledossier & "_fl1" with properties {name:"Corps-de-livre"}
    make new folder at newchemin & ":" & newnomledossier & "_fl1" with properties {name:"Couverture"}
    make new folder at newchemin & ":" & newnomledossier & "_fl2" with properties {name:"Corps-de-livre"}
    make new folder at newchemin & ":" & newnomledossier & "_fl2" with properties {name:"Couverture"}
   
   
    -- duplique tout
    set tous to entire contents of lechemin
    set nb to count tous
   
    repeat with i from 1 to nb
        duplicate item i of tous to newchemin & ":" & newnomledossier & "_fl1"
    end repeat
    repeat with i from 1 to nb
        duplicate item i of tous to newchemin & ":" & newnomledossier & "_fl2"
    end repeat
    -- fin duplique
   
    --duplique le fichier datamatrix
    set ledatamatrix to "Macintosh HD:Utilisateurs:Societe:Travaux en cours:NOUVEAUTES:GABARITS:DATAMATRIX:DATAMATRIX_000.pdf"
    duplicate ledatamatrix to newchemin & ":" & newnomledossier & "_fl3"
    --fin duplique datamatrix
   
    --efface fichier original
    set ledossier to quoted form of POSIX path of lechemin
    do shell script "rm -rf " & ledossier
end tell
```


----------



## zeltron54 (20 Décembre 2022)

En observant de plus près tes copies d'écran il semblerais que la copie des fichiers et dossiers originaux se fait dans le dossier "Couverture" et pas dans les dossiers "....Flx", comme dis dans tes explications .
Si tu veux changer cela fait moi signe...


----------



## Mattdu62 (21 Décembre 2022)

Bonjour,
C'est génial...
3 trucs qui reste à faire
Il y a les majuscules restantes et les apostrophes à supprimer dans le nom de fichier si possible
Tout le contenu doit se trouver dans "couverture"
Et le datamatrix.pdf ne se copie pas...
*error* "Erreur dans Finder : Le gestionnaire ne peut gérer des objets de cette classe." number -10010

Maintenant je vais éplucher ce script...

Merci encore Zeltron
Cordialement

Matt


----------



## zeltron54 (21 Décembre 2022)

Bonjour,
je ne comprend pas ce que tu veux dire par majuscule restante !

Ok je modifie le script pour mettre dans couverture !

Edit: je viens de voir ta modif !
Il faut donc remplacer les Majuscules par des minuscules et les apostrophes par ???
Donne un exemple ...


----------



## Mattdu62 (21 Décembre 2022)

je pensais ...
*repeat* *with* i *from* 1 *to* nb
*            duplicate* _item_ i *of* tous to newchemin & ":" & newnomledossier & "_fl1" & ":" & couverture
*end* *repeat*
*repeat* *with* i *from* 1 *to* nb
*duplicate* _item_ i *of* tous to newchemin & ":" & newnomledossier & "_fl2" & ":" & couverture & ":" &
*end* *repeat*
    -- fin duplique

.... mais ça ne marche pas


----------



## Mattdu62 (21 Décembre 2022)

par des tirets
exemple : 978-2-298-18169-5_Les-sœurs-d'Auschwitz
      devient 978-2-298-18169-5_les-sœurs-d-auschwitz


----------



## Mattdu62 (21 Décembre 2022)

J'essaye de savoir si ma logique est bonne, en aucun cas de t'offenser... Je viens d'y mettre un doigt dedans...

make new folder at newchemin & ":" & newnomledossier & "_fl1" with properties {name:"Couverture"}
et 
make new folder at newchemin & ":" & newnomledossier & "_fl2" with properties {name:"Couverture"}

Je pense qu'il faut les enregistrer en tant que variable...
Pour y placer le contenu
*duplicate* _item_ i *of* tous to variable 1 
*duplicate* _item_ i *of* tous to variable 2

Mais comment les enregistrer en variable...
"Apprend moi, ma coupe est vide"

Matt


----------



## zeltron54 (21 Décembre 2022)

Ok !

Essai ce script et dis-moi si cela te convient .


```
tell application "Finder"
    
    set lechemin to choose folder with prompt "Sélectionnez le Dossier principal à traiter ?"
    display dialog "Entrer le chiffre à ajouter à l'ISBN :" default answer ""
    set lechiffre to text returned of result
    set ledossier to name of lechemin
    set isbn to characters 1 thru 3 of ledossier & "-" & character 4 of ledossier & "-" & characters 5 thru 7 of ledossier & "-" & characters 8 thru 12 of ledossier & "-" & lechiffre as text
    set lenomdossier to characters 13 thru -4 of ledossier as text
    
    repeat with i from 1 to count lenomdossier
        if item i of lenomdossier is " " then
            set lenomdossier to items 1 thru (i - 1) of lenomdossier & "-" & items (i + 1) thru -1 of lenomdossier
        end if
    end repeat
    
    set lenomdossier to lenomdossier as text
    set lenomdossier to my remplace(lenomdossier)
    set newnomledossier to isbn & (lenomdossier as text)
    
    set sauv to AppleScript's text item delimiters
    set AppleScript's text item delimiters to {":"}
    set chem to lechemin as string
    set chemin to text items 1 thru -3 of chem as string
    set newchemin to chemin & ":" & newnomledossier
    set AppleScript's text item delimiters to sauv
    
    display dialog newnomledossier
    
    make new folder at chemin with properties {name:newnomledossier}
    make new folder at newchemin with properties {name:newnomledossier & "_fl1"}
    make new folder at newchemin with properties {name:newnomledossier & "_fl2"}
    make new folder at newchemin with properties {name:newnomledossier & "_fl3"}
    make new folder at newchemin & ":" & newnomledossier & "_fl1" with properties {name:"corps-de-livre"}
    make new folder at newchemin & ":" & newnomledossier & "_fl1" with properties {name:"couverture"}
    make new folder at newchemin & ":" & newnomledossier & "_fl2" with properties {name:"corps-de-livre"}
    make new folder at newchemin & ":" & newnomledossier & "_fl2" with properties {name:"couverture"}
    
    
    -- duplique tout
    set tous to entire contents of lechemin
    set nb to count tous
    
    repeat with i from 1 to nb
        duplicate item i of tous to newchemin & ":" & newnomledossier & "_fl1:couverture"
    end repeat
    repeat with i from 1 to nb
        duplicate item i of tous to newchemin & ":" & newnomledossier & "_fl2:couverture"
    end repeat
    -- fin duplique
    
    --duplique le fichier datamatrix
    set ledatamatrix to "Macintosh HD:Utilisateurs:Societe:Travaux en cours:NOUVEAUTES:GABARITS:DATAMATRIX:DATAMATRIX_000.pdf"
    duplicate ledatamatrix to newchemin & ":" & newnomledossier & "_fl3"
    --fin duplique datamatrix
    
    --efface fichier original
    set ledossier to quoted form of POSIX path of lechemin
    do shell script "rm -rf " & ledossier
end tell

on remplace(mavar)
    set aremplacer to {39, 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 {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
    
    -- remplace les caractères de la liste
    set nb to count characters in new
    set mavar to new
    
    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
                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 repeat
    end repeat
    set mavar to new
end remplace
```


----------



## Mattdu62 (21 Décembre 2022)

Merci
Il manque juste Le datamatrix.pdf.
*error* "Erreur dans Finder : Le gestionnaire ne peut gérer des objets de cette classe." number -10010


----------



## zeltron54 (21 Décembre 2022)

Certainement un problème de chemin...
J'ai mis

```
Macintosh HD:Utilisateurs:Societe:Travaux en cours:NOUVEAUTES:GABARITS:DATAMATRIX:DATAMATRIX_000.pdf
```
Vérifie si c'est correct.
Remplace éventuellement Utilisateurs par Users

Edit: pour t'aider à avoir le bon chemin, lance ce script qui te demande de sélectionner le fichier et te donne le chemin.

```
set lechemin to choose file with prompt "Sélectionnez le fichier datamatrix a incorporer ?"

display dialog lechemin as string
```


----------



## Mattdu62 (21 Décembre 2022)

C'est bon. Tout fonctionne.
J'avais oublié une lettre en écrivant le chemin.
Merci pour ton super boulot

Cordialement

Matt


----------



## zeltron54 (21 Décembre 2022)

OK content pour toi !..


----------



## zeltron54 (22 Décembre 2022)

Bonjour,
Dans le  script du message #10, j'avais oublié de supprimer la ligne (qui me servait de contrôle) 

```
display dialog newnomledossier
```
Qui est bien sur à supprimer, je pense que tu l'avais fait !


----------



## Mattdu62 (23 Décembre 2022)

Salut
La première fois que j'ai vu cette fenêtre, je me suis dit que c'est trop cool, je vais pouvoir vérifier...(au cas où je me trompe de touche avec mes gros doigts...)
Du coup, je l'ai laissé...

Par contre, j'ai des doublons... Excuse moi d'abuser de ton Savoir, pourrais-tu supprimer ces doublons ?






Encore merci pour ton boulot, tu me fais gagner énormément de temps...
Cordialement
Matt


----------



## zeltron54 (23 Décembre 2022)

Bonjour,

Je ne vois pas ce que tu veux faire!
Les fichiers que l'on voit sur ta copie d'écran sont dans le dossier "couverture", et le contenu de ce dossier est la copie de ce qu'il y avait dans ton dossier original !
Donc s'il y à des doublons, ils existaient à l'origine !

Qu'elle est ta demande exacte? ...

Edit: En regardant de près le contenu des dossier "Document fonts" et "Links" avaient été dupliqués dans le dossier original !


----------



## Mattdu62 (23 Décembre 2022)

Bonjour, le répertoire au début est celui-ci :





les fichiers .eps  sont dans le dossier "Llinks" et les polices dans le dossier "Documents fonts".
Le contenu de ces 2 dossiers ne doit pas être dupliqué dans couv. Ils doivent restés dans leur dossier respectif.

Cordialement

Matt


----------



## zeltron54 (23 Décembre 2022)

Oups! autant pour moi,

voici le nouveau script
J'ai laissé la fenêtre qui t'affiche le nom avant de valider
Pense à modifier le chemin du fichier DATAMATRIX

Dis moi si là c'est bon !


```
tell application "Finder"
    
    set lechemin to choose folder with prompt "Sélectionnez le Dossier principal à traiter ?"
    display dialog "Entrer le chiffre à ajouter à l'ISBN :" default answer ""
    set lechiffre to text returned of result
    set ledossier to name of lechemin
    set isbn to characters 1 thru 3 of ledossier & "-" & character 4 of ledossier & "-" & characters 5 thru 7 of ledossier & "-" & characters 8 thru 12 of ledossier & "-" & lechiffre as text
    set lenomdossier to characters 13 thru -4 of ledossier as text
    
    repeat with i from 1 to count lenomdossier
        if item i of lenomdossier is " " then
            set lenomdossier to items 1 thru (i - 1) of lenomdossier & "-" & items (i + 1) thru -1 of lenomdossier
        end if
    end repeat
    
    set lenomdossier to lenomdossier as text
    set lenomdossier to my remplace(lenomdossier)
    set newnomledossier to isbn & (lenomdossier as text)
    
    set sauv to AppleScript's text item delimiters
    set AppleScript's text item delimiters to {":"}
    set chem to lechemin as string
    set chemin to text items 1 thru -3 of chem as string
    set newchemin to chemin & ":" & newnomledossier
    set AppleScript's text item delimiters to sauv
    
    display dialog newnomledossier
    
    make new folder at chemin with properties {name:newnomledossier}
    make new folder at newchemin with properties {name:newnomledossier & "_fl1"}
    make new folder at newchemin with properties {name:newnomledossier & "_fl2"}
    make new folder at newchemin with properties {name:newnomledossier & "_fl3"}
    make new folder at newchemin & ":" & newnomledossier & "_fl1" with properties {name:"corps-de-livre"}
    make new folder at newchemin & ":" & newnomledossier & "_fl1" with properties {name:"couverture"}
    make new folder at newchemin & ":" & newnomledossier & "_fl2" with properties {name:"corps-de-livre"}
    make new folder at newchemin & ":" & newnomledossier & "_fl2" with properties {name:"couverture"}
    
    
    -- duplique les dossiers
    set lesdossiers to folders of lechemin
    set nb to count lesdossiers
    repeat with i from 1 to nb
        duplicate item i of lesdossiers to newchemin & ":" & newnomledossier & "_fl1:couverture"
    end repeat
    repeat with i from 1 to nb
        duplicate item i of lesdossiers to newchemin & ":" & newnomledossier & "_fl2:couverture"
    end repeat
    --duplique les fichiers
    set lesfichiers to files of lechemin
    set nb to count lesfichiers
    repeat with i from 1 to nb
        duplicate item i of lesfichiers to newchemin & ":" & newnomledossier & "_fl1:couverture"
    end repeat
    repeat with i from 1 to nb
        duplicate item i of lesfichiers to newchemin & ":" & newnomledossier & "_fl2:couverture"
    end repeat
    -- fin duplique
    
    --duplique le fichier datamatrix
    set ledatamatrix to "Macintosh HD:Utilisateurs:Societe:Travaux en cours:NOUVEAUTES:GABARITS:DATAMATRIX:DATAMATRIX_000.pdf"
    duplicate ledatamatrix to newchemin & ":" & newnomledossier & "_fl3"
    --fin duplique datamatrix
    
    --efface fichier original
    set ledossier to quoted form of POSIX path of lechemin
    do shell script "rm -rf " & ledossier
end tell

on remplace(mavar)
    set aremplacer to {39, 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 {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
    
    -- remplace les caractères de la liste
    set nb to count characters in new
    set mavar to new
    
    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
                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 repeat
    end repeat
    set mavar to new
end remplace
```


----------



## Mattdu62 (23 Décembre 2022)

Les doublons ont disparus...
Encore merci pour ta gentillesse de partager ton savoir
Bonne continuation
Et bonnes fêtes de fin d'année

Cordialement
Matt


----------

