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 :

Copier des fichiers d'après une liste


Sujet :

AppleScript

  1. #1
    Candidat au Club
    Homme Profil pro
    infographiste
    Inscrit en
    Avril 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : infographiste

    Informations forums :
    Inscription : Avril 2018
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Copier des fichiers d'après une liste
    Bonjour à tous,

    Au boulot nous utilisons un script afin de copier des PDF dans un dossier d'après une liste de nom de PDF.

    Nous copions par exemple 500 PDF dans un dossier "01_Recherche par liste",
    Nous copions ensuite notre liste dans le logiciel TxtWrangler et quand on lance le script, celui si se charge de venir chercher les PDF de la liste et copier les PDF du dossier "01_Recherche par liste" dans un nouveau dossier "Visuel"

    Mon problème est le suivant :

    Nous avons environ 50 listes et nous devons effectuer cette manipulation à chaque fois.
    Pensez-vous qu'il serait possible d’exécuter toutes nos listes en même temps, en les copiant les unes à la suites des autres, séparées entre elle par un symbole ? un mot ? qui serait détecté par le script et qui lui permettrait de créer un nouveau dossier "Visuel 1", 2, 3.. à chaque nouvelle séparation et donc tout traiter d'un coup ?

    Je précise que ce n'est pas moi qui coder ce premier script, j'ai vraiment du mal avec l'Applescript.
    Evidement je n'attends de vous que vous fassiez mon travail mais peut-être des pistes.

    Merci beaucoup à vous,
    Pierre.


    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    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
    91
    92
    93
    94
    95
    96
    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    ################################################################
    #		PARAMETRE
    ################################################################
     
    -- Fichier source contenant les visuels recherchés
    property IN_DIR : "/Volumes/Stock/01_Recherche par liste/"
     
     
    --————————————————————————————————————————————
    -- Libraires 
    --————————————————————————————————————————————
     
    set cc to load script alias ((path to library folder as string) & "Scripts:easyProd_common:Common Code.app")
    global cc
     
     
    set libIMG to cc's load("LIB.BaseImage")
    global libIMG
     
     
     
    --————————————————————————————————————————————
    -- Constantes 
    --————————————————————————————————————————————
     
    property DIR_VISU : "Visuels"
    property LOG_FILE : "extractionVisuels.log"
     
    property MAX_PAQUET_VISU : 400
     
    --————————————————————————————————————————————
    -- Fonctions 
    --————————————————————————————————————————————
     
    ---------------------------------------------------------------------------------------------------------
    -- Temps d'exécution
    global startTime
    set startTime to current date
    cc's clean_terminal()
     
    on getExecTime()
    	return cc's getTimeSince(startTime as string)
    end getExecTime
     
    on showMsg(msg)
    	cc's show_me((cc's getTimeSince(startTime) & ".. " & msg) as string)
    end showMsg
     
    --————————————————————————————————————————————
    -- Main 
    --————————————————————————————————————————————
     
     
     
    my showMsg("Extraction des infos du fchier ouvert dans TextWrangler")
    tell application "TextWrangler"
    	set {chemin, contenu} to {file, contents} of document 1
    end tell
    set chemin to "" & chemin
     
    set outDirOSX to text 1 thru (cc's lastPositionInString(":", "" & chemin)) of chemin
    set outDirX to "" & POSIX path of outDirOSX
     
    set visuDirOSX to outDirOSX & DIR_VISU & ":"
    set visuDirX to "" & POSIX path of visuDirOSX
     
    my showMsg("Création du répertoire “Visuels” dans le répertoire de sortie")
    tell application "System Events"
    	try
    		make new folder at folder outDirOSX with properties {name:DIR_VISU}
    	on error
    		delete folder (visuDirOSX)
    		make new folder at folder outDirOSX with properties {name:DIR_VISU}
    	end try
    end tell
     
    my showMsg("Récupération des visuels")
    set listeVisuels to paragraphs of contenu
     
    set listeVisuelsOK to {}
    set listeVisuelsKO to {}
    set listeVisuelsDoublons to {}
    set listeErreurs to {}
     
    set totalVisus to length of listeVisuels
    set indexVisu to 1
     
    repeat with img in listeVisuels # items 1 thru MAX_PAQUET_VISU of
    	set img to "" & img
    	try
    		set imgPath to do shell script "find " & quoted form of IN_DIR & " -name " & img & "*"
    		if length of paragraphs of imgPath > 1 then
    			set end of listeVisuelsDoublons to img
    			my showMsg("→ Visuel en double : " & img)
    		else
    			log "find " & quoted form of visuDirX & " -name " & img & "*"
    			log imgPath
    			try
    				do shell script "cp -p " & quoted form of imgPath & " " & quoted form of visuDirX
     
    				set end of listeVisuelsOK to img
     
    				#if indexVisu = 50 then
    				#	set indexVisu to 0
    				#	my showMsg("→ Visuel OK : " & img)
    				#end if
    				my showMsg("→ Visuel " & totalVisus - indexVisu & "/" & totalVisus & " OK : " & img)
    			on error errMsg
    				log errMsg
    				set end of listeVisuelsKO to img
    				my showMsg("→ Visuel déjà copié : " & img)
    				#			my showMsg("→ Visuel déjà copié : " & img & " - reste " & totalVisus - indexVisu)
    			end try
    		end if
    	on error errMsg
    		set end of listeErreurs to img & return & "(" & errMsg & ")"
    		my showMsg("→ Rejet : " & img)
    		#		my showMsg("→ Rejet : " & img & " - reste " & totalVisus - indexVisu)
    	end try
    	set indexVisu to indexVisu + 1
    end repeat
     
     
     
    my showMsg("Ecriture du fichier de logs")
    set logFileFullPath to quoted form of (outDirX & LOG_FILE)
     
     
     
    do shell script "laDate=$(date '+%Y.%m.%d %H:%M:%S'); echo " & return & ¬
    	"••• Extraction de visuels •••" & return & ¬
    	"${laDate}" & return & return & " > " & logFileFullPath
     
    if length of listeVisuelsOK > 0 then ¬
    	do shell script "echo " & return & ¬
    		"----- Visuels extraits :" & return & return & ¬
    		cc's listToString(listeVisuelsOK, return) & return & " >> " & logFileFullPath
     
    if length of listeVisuelsKO > 0 then ¬
    	do shell script "echo " & return & return & ¬
    		"----- Visuels déjà copiés :" & return & return & cc's listToString(listeVisuelsKO, return) & return & " >> " & logFileFullPath
     
    if length of listeVisuelsDoublons > 0 then ¬
    	do shell script "echo " & return & return & ¬
    		"----- Visuels en double :" & return & return & cc's listToString(listeVisuelsDoublons, return) & return & " >> " & logFileFullPath
     
    if length of listeErreurs > 0 then
    	log cc's listToString(listeErreurs, return)
    	do shell script "echo " & return & return & ¬
    		"----- Rejets :" & return & return & cc's listToString(listeErreurs, return) & return & " >> " & logFileFullPath
     
    	my showMsg("Des erreurs ont été détectées.")
    	tell me
    		activate
    		display dialog ¬
    			("Exécution terminée." & linefeed & linefeed & ¬
    				"Regarder les logs pour afficher les erreurs.") ¬
    				buttons {"OK"} default button "OK" with title "Exécution terminée"
    	end tell
    	return
    end if
     
    my showMsg("Exécution terminée : aucune erreur détectée")
    tell application "Finder" to reveal folder visuDirOSX
    tell me
    	activate
    	display dialog ("Exécution terminée sans erreur") ¬
    		buttons {"OK"} default button "OK" with title "Exécution terminée"
    end tell

  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
    Bonjour,
    N'ayant pas TxtWrangler, je ne peux vérifier ton script. De plus celui-ci fait appel à une bibliothèque de script que vous avez développé en interne et qui est dans le dossier Bibliothèque, sous dossier Scripts, puis le dossier easyProd_common, dans le fichier Common Code.app".

    Donc globalement, sans l'un, ni le détail du contenu de l'autre, il est difficile d'aider pour ton script.

    Cependant, si j'ai bien compris, tout ce script part du principe qu'un fichier est ouvert dans txtWrangler et traite la liste de chemins et fichiers qu'il contient.
    On pourrait donc se contenter de boucler sur une liste de fichier TxtWrangler, puis, pour chacun:
    - L'ouvrir dans TxtWrangler
    - lancer ton script actuel tel quel
    - le fermer
    - passer au fichier de liste suivant jusqu'à avoir parcouru toutes les listes.

    Il faut d'abord déterminer comment les fichiers de listes peuvent être sélectionnés. Comme il y en a 50, sans doute le plus simple est de les mettre tous dans un seul dossier ne contenant que cela. Il faudra alors sélectionner le dossier puis lire tous les fichiers un par un.
    Voici un exemple de script qui sélectionne un dossier, et prends chaque fichier qu'il contient (tes 50 listes) pour les traiter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    set DossierListes to choose folder with prompt "Sélectionner le dossier contenant les listes à traiter"
    
    tell application "Finder" to set MesListes to every file of DossierListes
    repeat with uneListe in MesListes
    --mettre ici l'ouverture du fichier uneListe dans TxtxWrangler
        
    -- appel à ton script actuel
        
    -- mettre ici la fermeture du fichier uneListe dans TxtWrangler
    
    end repeat -- le programme va se répéter pour toutes les listes du dossier[FONT=Verdana]
    Pour lancer ton script, il faut peut être mettre un délai (exemple une ligne avec "delay 0.5" attends une demi seconde) pour laisser le temps à Txt Wrangler d'ouvrir la liste. Le lancement de ton script dépend si il est sous forme "scpt" ou application. Tu devras indiquer son chemin d'accès et son nom.

    Attention, ton script actuel informe l'utilisateur à la fin de l'exécution (dialogue "Exécution terminée sans erreur"). Il serait judicieux de placer cette ligne juste après le repeat du script ci-dessus afin que ce message n'apparaisse pas à chaque liste, mais seulement à la fin de la boucle sur toutes les listes.

    Il faudrait sans doute aussi revoir les traces/log (les do shell script "echo...") afin que le nom de la liste soit affiché.
    En effet, actuellement, si tu rencontres une erreur, tu sais de quelle liste cela provient. Mais si tu traites 50 listes, il faudra bien afficher l'erreur en indiquant de quelle liste elle provient !

    Cordialement

Discussions similaires

  1. [XL-2010] Macro pour renommer des fichiers à partir d'une liste de nom de fichiers
    Par thomahh dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 25/01/2013, 17h03
  2. Suppression de fichiers d'après une liste
    Par Gardel dans le forum VBScript
    Réponses: 2
    Dernier message: 11/11/2010, 21h09
  3. Copier des cellules excel dans une liste déroulante vba
    Par Papillon34 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/01/2010, 16h03
  4. Copier des fichier *.xls dans une table POSTGRES
    Par halim-aman dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 30/06/2009, 19h26
  5. [ClickOnce] Garder des fichiers modifiés après une update
    Par User.Anonymous dans le forum VB.NET
    Réponses: 1
    Dernier message: 04/06/2009, 16h48

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