IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AppleScript Discussion :

"renommage" de fichiers


Sujet :

AppleScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Points : 10
    Points
    10
    Par défaut "renommage" de fichiers
    Bonjour,

    Je voudrais automatiser un "renommage" de fichiers :

    Pour chaque nom dans un dossier

    rechercher le 1er caractère alphabetique
    rechercher le dernier tiret
    recopier du 1er alpha au dernier tiret, en début de nom

    exemple

    000000138432-nom1_nom2-azerty

    devient

    nom1_nom2-000000138432-nom1_nom2-azerty


    Comment faire : applescript, automator ou commande du type grep ou sed ?
    Pourriez-vous m indiquer comment coder cette manip ? Merci d avance.



    Didier

    MBP15 2010 MacOS 10.6.8

  2. #2
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut renommage de fichier
    Bonjour dpk98,
    Pour renommer des fichiers, il y a une action Automator toute prête, qui permet de numéroter les fichiers, mais pas qui permet d'appliquer la règle que tu souhaites.
    Donc AppleScript est fait pour ça. Voici un petit code rapide (qui pourrait sans doute être optimisé) avec des commentaires pour plus de clarté.

    Attention, je ne gère pas les erreurs, par exemple si le nom de ton fichier n'a pas de tiret ou pas d'alpha (peu probable) ou si le premier alpha est après le dernier tiret ! A toi de voir ce qu'il faut faire dans ces cas. Dans mon script, je ne fais rien pour l'instant !

    Tu ouvres l'AppleScript editor, tu copy/paste le code ci-dessous, et ..hop !
    Je n'utilise aucune fonction spéciale, donc cela devrait tourner sur un peu près toutes les versions d'OS X...
    Bonne journée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    -- renome les fichiers d'un dossier avec des règles 
    tell application "Finder"
    	-- Sélectionne le dossier
    	set F to choose folder with prompt "Sélectionner le dossier dont il faut changer les fichiers :"
     
    	-- Sélectionne les fichiers du dossier 
    	set Listfichiers to every file of the folder F
     
    	-- confirmation finale ! (par défaut c'est cancel)
    	display dialog "Confirmer le changement irréversible des noms des " & (count of Listfichiers) & " fichiers du dossier " & F & " !!" with icon stop default button 1
     
    	-- initialise les caractères alphabetiques
    	set Alpha to {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}
    	set Alpha to Alpha & {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Y", "Z"}
     
    	-- changement en boucle
    	repeat with i from 1 to (count of Listfichiers)
    		-- lit le nom du fichier
    		set Ancien to (name of item i of Listfichiers)
    		-- L = longeur du nom
    		set L to length of Ancien
    		-- initialise les positions des lettres et des tirets
    		set PosAlpha to 0
    		set PosTiret to 0
     
    		-- boucle sur les lettres du nom est extrait les positions du premier alpha et dernier tiret
    		repeat with c from 1 to L
    			if (PosAlpha = 0) and ((character c of Ancien) is in Alpha) then set PosAlpha to c
    			if (character c of Ancien is "-") then set PosTiret to c
    		end repeat
     
    		-- vérifie que c'est correct (PosAlpha < PosTiret)
    		if PosAlpha < PosTiret then
    			-- Nouveau nom = ancien (de PostAlpha à PosTiret) + Ancien
    			set Nouveau to (characters PosAlpha thru PosTiret of Ancien) & Ancien
    			--change le nom du fichier
    			set the name of item i of Listfile to Nouveau
    		else
    			-- il faudrait rajouter ici la gestion des erreurs lorsque il n'y a pas de tirets ou d'alpha ou le dernier tiret est avant l'alpha...
    		end if
     
    	end repeat
     
    	-- informe l'utilisateur
    	display dialog "Les " & (count of Listfichiers) & " fichiers ont été renommés" with icon caution
    end tell

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Points : 10
    Points
    10
    Par défaut
    merci infiniment PBELL de m avoir gentillement et clairement répondu (avec commentaires) Je n en espérais pas tant.
    Je vais essayer
    Merci,
    Didier

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Points : 10
    Points
    10
    Par défaut
    Merci.
    J ai "corrigé" une erreur Listfiles au lieu de Listfichiers (fastoche).
    Mais erreur d execution (voir PJ)
    Peux-tu m aider encore ?
    Images attachées Images attachées  

  5. #5
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut renommer des fichiers
    Bonjour dpk98,
    c'est effectivement une erreur..qui n'aurait pas du fonctionner chez moi aussi...curieux...? je ferai des tests complémentaires ce week end !!

    En attendant, l'erreur est simple à corriger :
    il faut changer l'instruction :

    set Nouveau to (characters PosAlpha thru PosTiret of Ancien) & Ancien

    en :

    set Nouveau to (text PosAlpha thru PosTiret of Ancien) & Ancien

    La première assigne à la variable Nouveau des caractères, la seconde version assigne un texte. Les noms du Finder doivent être des textes !

    Cordialement

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Points : 10
    Points
    10
    Par défaut
    Bonjour PBELL et merci.

    La modification fonctionne.
    Je pense à m'initier à Applescript/Automator maintenant (j'ai été AP sur mainfames IBM (MVS VM/CMS CICS DL1 assembleur 370) entre 1980 et 1992).

    Merci de ta gentillesse.

    Didier

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo