Automatisation : ouverture et tri de fichiers si endommagé [Résolu] |
Bienvenue invité ( Connexion | Inscription )
Automatisation : ouverture et tri de fichiers si endommagé [Résolu] |
4 Apr 2020, 12:16
Message
#1
|
|
Nouveau Membre Groupe : Membres Messages : 22 Inscrit : 5 Sep 2012 Membre no 178 669 |
Bonjour tout le monde,
Tout d'abord, je précise que je n'y connais absolument rien en automatisation, scripts, etc. et que je ne connais donc pas du tout les logiciels/outils qui me permettraient de faire ce que je souhaite faire. Je connais Automator de nom et qui a l'air très simple d'utilisation, mais à première vue, il ne m'aidera pas de le cas présent. Je cherche donc une autre solution mais j'aurais besoin d'un coup de pouce pour trouver l'outil qui m'aidera à régler mon problème. Pour résumer : J'aimerais automatiser le tri de 18000 fichiers .ALS (fichiers Ableton Live) potentiellement endommagés. Si le logiciel signale le fichier comme étant endommagé, alors il est transféré dans un autre dossier. Sinon, rien n'est fait. Le contexte : J'ai fait une mise à jour de mon OS en clean install. J'ai sauvegarder les fichiers que je souhaitais sauver par un habile copié-collé (oui, je n'ai pas utilisé Time Machine, que j'utilise habituellement, pour des raisons indépendantes de Time Machine en lui-même ). Finder m'a proposé de fusionner certains dossiers, mais je me suis rendu compte que ça n'avait pas fonctionné comme je m'y attendais et malheureusement, je n'ai pas pris la peine de vérifier avant de formater mon disque dur. Je tente une récupération avec Disk Drill. Parmi les fichiers que je souhaite récupérer, il y a des fichiers .ALS qui sont utilisés par le logiciel de MAO Ableton Live. Disk Drill en a trouvé 18000 alors qu'à la base, je devais en avoir une 100 aine au maximum. Je teste les 50 premiers fichiers, à l'ouverture, Ableton Live me les signalent tous comme étant endommagés. L'opération est fastidieuse et j'aimerais pouvoir automatiser la tâche. Ce que je souhaite faire pour chaque fichier : 1- Ouvrir le fichier avec Ableton Live. 2- a- A l'ouverture, si le fichier est endommagé, Ableton Live le signale par le message suivant : 2- b- Sinon le fichier s'ouvre normalement. 3- a- Si le fichier est signalé comme étant endommagé, le fichier est transféré vers un dossier. 3- b- Si le fichier est ouvert correctement, rien n'est fait. Si vous avez une autre méthode à proposer, je suis totalement preneur !! J'allais poster dans la section "Technologies Apple" mais j'ai l'impression que ça correspond mieux ici. N'hésitez pas à me dire si je dois changer le post de section. Merci d'avance pour vos retours, zorkwolf Ce message a été modifié par zorkwolf - 4 Apr 2020, 12:19. |
|
|
4 Apr 2020, 14:54
Message
#2
|
|
Macbidouilleur de vermeil ! Groupe : Membres Messages : 989 Inscrit : 22 Aug 2002 Lieu : 06220 VALLAURIS Membre no 3 217 |
Bonjour
Ce script a été testé avec la version d'essai gratuite de l'application. Il faudra sans doute y modifier le nom de celle-ci Attention, TOUTES les lignes sont à conserver. CODE ----------------------------------------------------------------
use AppleScript version "2.5" use framework "Foundation" use scripting additions -- Yvan KOENIG (VALLAURIS, France) samedi 4 avril 2020 15:51:22 ---------------------------------------------------------------- property |⌘| : a reference to current application my Germaine() on Germaine() set ableton to ((path to applications folder as string) & "Ableton Live 10 Trial.app:") as «class furl» -- Éditer le nom de l'application set p2d to path to desktop set sourceFolder to (choose folder "Sélectionner le dossier à analyser" default location p2d) as string set junkFolder to (choose folder "Sélectionner le dossier où ranger les corrompus" default location ((p2d as string) & "Junk:") as alias) as string set aBundle to ((path to library folder from system domain as string) & "Frameworks:ApplicationServices.framework:Versions:Current:Frameworks:HIServ ices.framework:") as «class furl» set red_loc to localized string "Label_Name_6" from table "Labels" in bundle aBundle -- récupère la chaîne locale pour "Red" set fileManager to a reference to |⌘|'s NSFileManager's defaultManager() -- set skipsSubdirectoryDescendants to |⌘|'s NSDirectoryEnumerationSkipsSubdirectoryDescendants as integer --> 1 set skipsPackageDescendants to |⌘|'s NSDirectoryEnumerationSkipsPackageDescendants as integer --> 2 set skipsHiddenFiles to |⌘|'s NSDirectoryEnumerationSkipsHiddenFiles as integer --> 4 set theOptions to skipsPackageDescendants + skipsHiddenFiles set NSURLIsDirectoryKey to |⌘|'s NSURLIsDirectoryKey set keysToRequest to {NSURLIsDirectoryKey} tell me to display notification "Commence à scanner le dossier" & linefeed & (current date) set theURL to (|⌘|'s NSArray's arrayWithObject:(sourceFolder as «class furl»))'s firstObject() -- test désactivé parce que, étant défini par Choose folder, le dossier existe -- if (theURL's checkResourceIsReachableAndReturnError:(missing value)) as boolean is false then error "The folder “" & sourceFolder & "” isn't available." set junkURL to (|⌘|'s NSArray's arrayWithObject:(junkFolder as «class furl»))'s firstObject() -- test désactivé parce que, étant défini par Choose folder, le dossier existe -- if (junkURL's checkResourceIsReachableAndReturnError:(missing value)) as boolean is false then error "The folder “" & junkFolder & "” isn't available." set allURLs to (fileManager's enumeratorAtURL:theURL includingPropertiesForKeys:keysToRequest options:theOptions errorHandler:(missing value))'s allObjects() if allURLs is equal to missing value then error (theError's localizedDescription() as text) tell me to display notification "trouvé " & (count allURLs) & " URLs." & linefeed & (current date) set theFormat to "(self.path ENDSWITH[c] '.ALS')" -- pour lister les fichiers dont le nom se termine par ".ALS" set thePredicate to |⌘|'s NSPredicate's predicateWithFormat:theFormat set fichiersALS to (allURLs's filteredArrayUsingPredicate:thePredicate) tell me to display notification "trouvé " & (count fichiersALS) & " fichiers .ALS." & linefeed & (current date) repeat with aURL in fichiersALS set aFurl to aURL as «class furl» tell application "Finder" to open aFurl using ableton delay 0.5 tell application "System Events" to tell process "Live" set frontmost to true repeat set nbWindows to count windows if nbWindows > 0 then exit repeat delay 0.1 end repeat if exists (first window whose subrole is "AXDialog") then -- attribue un double tag set {theResult, theError} to (aURL's setResourceValue:{red_loc, "ALS corrompu"} forKey:(current application's NSURLTagNamesKey) |error|:(specifier)) -- déplace le fichier (my moveFromURL:aURL toFolder:junkURL) try repeat 20 times if (count windows) = 0 then exit repeat tell window 1 if exists button 1 then click button 1 else keystroke return end if end tell delay 0.2 end repeat on error errmsg number errNbr -- tell application "Finder" to display dialog errmsg -- "Erreur dans System Events : Il est impossible d’obtenir process \"Live\"." end try end if end tell -- "System Events"… end repeat end Germaine #===== on setTags:tagList forPath:thisURL set {theResult, theError} to thisURL's setResourceValue:tagList forKey:(current application's NSURLTagNamesKey) |error|:(reference) if theResult as boolean is false then error (theError's |localizedDescription|() as text) end setTags:forPath: #===== on moveFromURL:sourceURL toFolder:junkURL set theFileManager to |⌘|'s NSFileManager's |defaultManager|() set origName to sourceURL's |lastPathComponent|() as string --> "trucmuche.ALS" set bareName to text 1 thru -5 of origName tell me to tell (current date) to set stamp to (((its year) * 10000 + (its month) * 100 + (its day)) as text) & "_" & text 2 thru -1 of ((1000000 + (its hours) * 10000 + (its minutes) * 100 + (its seconds)) as text) -- par sécurité, intercale date-time pour éviter doublons set destName to bareName & "_" & stamp & ".ALS" --> "trucmuche_20200404_154332.ALS" set destinationURL to junkURL's URLByAppendingPathComponent:destName set {theResult, theError} to (theFileManager's moveItemAtURL:sourceURL toURL:destinationURL |error|:(reference)) end moveFromURL:toFolder: #===== |
|
|
4 Apr 2020, 15:29
Message
#3
|
|
Nouveau Membre Groupe : Membres Messages : 22 Inscrit : 5 Sep 2012 Membre no 178 669 |
Bonjour Yvan et merci beaucoup pour votre réponse.
Si je comprends bien le code, je n'ai même pas à créer manuellement le dossier ou définir la localisation du dossier d'origine dans le script, il me proposera de sélectionner le dossier en s'exécutant, c'est exact ? zorkwolf |
|
|
4 Apr 2020, 16:48
Message
#4
|
|
Macbidouilleur de vermeil ! Groupe : Membres Messages : 989 Inscrit : 22 Aug 2002 Lieu : 06220 VALLAURIS Membre no 3 217 |
Non, il ne m'a pas semblé utile de coder la création des dossiers.
Le script se borne à utiliser la fonction "choose folder" pour permettre de sélectionner deux dossiers existants: sourceFolder qui est celui censé contenir les fichiers à analyser junkFolder qui est celui censé recevoir les fichiers identifiés comm corrompus. Ce script s'utilise à partir de l'application "SSD 1000:Applications:Utilities:Script Editor.app:" soit "SSD 1000:Applications:Utilitaires:Éditeur de scripts.app:" en Français. En fait, une fois de plus, j'ai oublié que le dialogue choose folder permet de créer un dossier à la volée. Ce message a été modifié par KOENIG Yvan - 4 Apr 2020, 16:51. |
|
|
4 Apr 2020, 17:22
Message
#5
|
|
Nouveau Membre Groupe : Membres Messages : 22 Inscrit : 5 Sep 2012 Membre no 178 669 |
Je viens de lancer le script. En effet, aucun souci à ce niveau. En revanche, un message d'erreur immédiatement après avoir sélectionner le junkFolder :
error "Impossible de convertir file \"ZMac:System:Library:Frameworks:ApplicationServices.framework:Versions:A:Fra meworks:HIServ ices.framework:\" en type file." number -1700 from file "ZMac:System:Library:Frameworks:ApplicationServices.framework:Versions:A:Fra meworks:HIServ ices.framework:" to file Dans l'encart du script est surligné ceci : Code localized string "Label_Name_6" from table "Labels" in bundle aBundle Ma version d'Editeur de Script est 2.10. Le problème peut-il venir de là comme la version mentionnée dans le script et 2.5 ? Et j'avais oublié de préciser que je suis sous l'Os 10.13.6 EDIT : J'ai trouvé le problème ! Un retour à la ligne impertinent s'était glissé dans votre code ici : Code set aBundle to ((path to library folder from system domain as string) & "Frameworks:ApplicationServices.framework:Versions:Current:Frameworks:HIServ ices.framework:") as «class furl» Après correction, ça a l'air de fonctionner parfaitement. Évidemment, il ne pouvait pas localiser la chaîne de caractère sur la ligne suivante étant donné qu'il ne pouvait pas trouver le bundle. Je lancerai le script tranquillement cette nuit. Edit de l'edit : Si j'avais mieux lu le message d'erreur dans un premier temps, j'aurais pu m'en rendre compte plus vite... Merci infiniment pour votre aide ! Je suis même presque content de cette erreur car j'ai dû chercher pour comprendre et j'aurai appris 2-3 trucs Au plaisir !! zorkwolf Ce message a été modifié par zorkwolf - 4 Apr 2020, 18:10. |
|
|
5 Apr 2020, 13:08
Message
#6
|
|
Macbidouilleur de vermeil ! Groupe : Membres Messages : 989 Inscrit : 22 Aug 2002 Lieu : 06220 VALLAURIS Membre no 3 217 |
Bonjour
Le saut de ligne incongru a été introduit par le code du forum qui 'formate' les scripts qui lui sont fournis. Il n'existe pas dans le script que j'ai inséré. Au pire vous pouvez remplacer les instructions CODE set aBundle to ((path to library folder from system domain as string) & "Frameworks:ApplicationServices.framework:Versions:Current:Frameworks:HIServ ices.framework:") as «class furl» set red_loc to localized string "Label_Name_6" from table "Labels" in bundle aBundle -- récupère la chaîne locale pour "Red" par CODE set red_loc to "rouge" Postant régulièrement sur des sites anglophones j'ai l'habitude de faire de mon mieux pour proposer des scripts capables de fonctionner quel que soit le langage utilisé par le système actif. Comme je suis curieux j'essaie de poster la paire d'instructions perturbée en utilisant e caractère “continuer à la ligne suivante” disponible dans l'éditeur de scripts. CODE set aBundle to ((path to library folder from system domain as string) ¬ & "Frameworks:ApplicationServices.framework:Versions:Current:Frameworks:HIServ ices.framework:") as «class furl» set red_loc to localized string "Label_Name_6" from table "Labels" in bundle aBundle -- récupère la chaîne locale pour "Red" Cela me permettra de savoir si l'éditeur du site gère correctement cette fonction. Pour revenir aux numéros de version, celui d'Applescript et celui de l'éditeur ne sont pas liés. J'utilise également 10.13.6 (mon iMac n'accepte pas plus). On n'est pas obligé d'utiliser l'éditeur d'Apple. Lorsque je souhaite disposer de fonctions plus puissante j'ai recours à Script Debugger qui en est à la version 7.0.11 Question au sujet de 10.13.6. Avez-vous installé la mise à jour de sécurité 2020-002 10.13.6 diffusée la semaine dernière ? Je l'avais fait mais j'ai du faire marche arrière car, sur ma machine, elle apportait deux anomalies rédhibitoires: -- le menu > Préférences Système… ne fonctionnait plus -- un script aussi élaboré que CODE tell application "TextEdit" -- ou toute autre application activate end tell générait le message : error "Une erreur de type -10810 est survenue." number -10810 Ce problème sévit-il chez vous ? J'hésite à ré-appliquer la dite mis à jour malgré les notifications reçues pour m'inciter à le faire. Merdum, l'éditeur du code du forum tient vraiment à son saut de ligne incongru qui, je le répète, n'existe pas dans le texte collé. Ce message a été modifié par KOENIG Yvan - 5 Apr 2020, 13:11. |
|
|
5 Apr 2020, 14:05
Message
#7
|
|
Macbidouilleur d'Or ! Groupe : Modérateurs Messages : 19 574 Inscrit : 22 Jul 2004 Lieu : Louvain-la-Neuve (Gaule Gelbique) Membre no 21 291 |
[H.S.]
Merdum, l'éditeur du code du forum tient vraiment à son saut de ligne incongru qui, je le répète, n'existe pas dans le texte collé. Il se peut que ça apparaisse parce qu'il y a eu édition du message. Ça vaudrait aussi la peine de tester avec les balises CODEBOX plutôt que CODE. -------------------- ¶ MacBook Pro 14’’ 2021, M1 Pro, 16 Go/1 To – macOS 12.6 “Monterey” ¶ MacBook Pro 15’’ mi-2010 Core i5 2,53 GHz, 8 Go/SSD Samsung 860EVO 1 To – Mac OSX 10.6.8 ¶ Power Macintosh G3 beige de bureau, rev.1 @ 233MHz, 288 Mo/4Go – MacOS 9.1 + carte PCI IDE/ATA Tempo 66 Acard 6260 avec HD interne Maxtor 80 Go + graveur interne CDRW/DVD LG GCC-4520B + tablette A4 Wacom UD-0608-A + LaCie ElectronBlueIV 19" + HP ScanJet 6100C ¶ B-Box 3 + HP LaserJet 4000 N
¶ La recherche dans MacBidouille vous paraît obscure ? J'ai rédigé une proposition de FAQ. Le moteur logiciel a un peu changé depuis mais ça peut aider quand même. … Les corsaires mettent en berne… |
|
|
5 Apr 2020, 14:43
Message
#8
|
|
Macbidouilleur de vermeil ! Groupe : Membres Messages : 989 Inscrit : 22 Aug 2002 Lieu : 06220 VALLAURIS Membre no 3 217 |
[H.S.] Merdum, l'éditeur du code du forum tient vraiment à son saut de ligne incongru qui, je le répète, n'existe pas dans le texte collé. Il se peut que ça apparaisse parce qu'il y a eu édition du message. Ça vaudrait aussi la peine de tester avec les balises CODEBOX plutôt que CODE. Merci, mais dans tous les cas, je suis passé par l'outil [Accès rapide] > Insérer : CODEBOX De plus, mon premier message n'avait pas subl d'édition. |
|
|
5 Apr 2020, 18:55
Message
#9
|
|
Macbidouilleur de vermeil ! Groupe : Membres Messages : 989 Inscrit : 22 Aug 2002 Lieu : 06220 VALLAURIS Membre no 3 217 |
Test du comportement du bloc généré par l'outil CODEBOX
CODE set aBundle to path to library folder from system domain as string set aBundle to aBundle & "Frameworks:ApplicationServices.framework:Versions:Current:Frameworks:HIServ ices.framework:" set aBundle to aBundle as «class furl» set red_loc to localized string "Label_Name_6" from table "Labels" in bundle aBundle -- récupère la chaîne locale pour "Red" set aBundle to path to library folder from system domain as string set aBundle to aBundle & "Frameworks:ApplicationServices.framework:" set aBundle to aBundle & "Versions:Current:Frameworks:HIServices.framework:" set aBundle to aBundle as «class furl» set red_loc to localized string "Label_Name_6" from table "Labels" in bundle aBundle -- récupère la chaîne locale pour "Red" set aBundle to path to library folder from system domain as string set aBundle to aBundle & "Frameworks:ApplicationServices.framework:" set aBundle to (aBundle & "Versions:Current:Frameworks:HIServices.framework:") as «class furl» set red_loc to localized string "Label_Name_6" from table "Labels" in bundle aBundle -- récupère la chaîne locale pour "Red" Il me faut donc au minimum trois étapes pour définir la variable aBundle |
|
|
5 Apr 2020, 19:14
Message
#10
|
|
Macbidouilleur d'Or ! Groupe : Modérateurs Messages : 19 574 Inscrit : 22 Jul 2004 Lieu : Louvain-la-Neuve (Gaule Gelbique) Membre no 21 291 |
Vérification faite, c'est plutôt le contraire de ce que j'indiquais. Mieux vaut utiliser les balises CODE (bouton ) pour éviter les coupures intempestives.
L'édition ne change rien. Test de passage à la ligne : Balises CODE Code set aBundle to aBundle & "Frameworks:ApplicationServices.framework:Versions:Current:Frameworks:HIServices.framework:" Balises CODEBOX CODE set aBundle to aBundle & "Frameworks:ApplicationServices.framework:Versions:Current:Frameworks:HIServ
ices.framework:" -------------------- ¶ MacBook Pro 14’’ 2021, M1 Pro, 16 Go/1 To – macOS 12.6 “Monterey” ¶ MacBook Pro 15’’ mi-2010 Core i5 2,53 GHz, 8 Go/SSD Samsung 860EVO 1 To – Mac OSX 10.6.8 ¶ Power Macintosh G3 beige de bureau, rev.1 @ 233MHz, 288 Mo/4Go – MacOS 9.1 + carte PCI IDE/ATA Tempo 66 Acard 6260 avec HD interne Maxtor 80 Go + graveur interne CDRW/DVD LG GCC-4520B + tablette A4 Wacom UD-0608-A + LaCie ElectronBlueIV 19" + HP ScanJet 6100C ¶ B-Box 3 + HP LaserJet 4000 N
¶ La recherche dans MacBidouille vous paraît obscure ? J'ai rédigé une proposition de FAQ. Le moteur logiciel a un peu changé depuis mais ça peut aider quand même. … Les corsaires mettent en berne… |
|
|
6 Apr 2020, 00:57
Message
#11
|
|
Nouveau Membre Groupe : Membres Messages : 22 Inscrit : 5 Sep 2012 Membre no 178 669 |
Bonjour,
Citation Au pire vous pouvez remplacer les instructions J'ai lancé le script avant hier-soir et en supprimant le retour à la ligne, et ça fonctionne très bien ! Il ne reste que 3000 fichiers à trier environ mais je fais faire une pause à la machine qui n'a pas cessé de fonctionner. N'ayant absolument aucune connaissance en programmation, la coupure de la balise CODE m'aura obligé à aller faire quelques recherches pour comprendre le langage, ce qui est plutôt une bonne chose en soi, car même si vous m'avez mâcher (et digérer) le travail, j'aime bien comprendre un peu comment ça fonctionne aussi. Concernant vos questions sur la version 10.13.6, j'ai testé votre script et je n'ai pas ce problème. A vrai dire, j'ai installé l'OS 10.13 sur mon Macbook il y a à peine 3 jours et la mise à jour de sécurité ne semble pas s'être faite à l'installation car elle m'est proposée dans l'App Store. Je vous remercie encore une fois pour votre aide précieuse. Sans cela, il était inimaginable que je teste les fichiers manuellement. De plus, certains fichiers ne semble pas être endommagés, j'ai donc bon espoir de récupérer quelques projets ! |
|
|
6 Apr 2020, 10:47
Message
#12
|
|
Macbidouilleur de vermeil ! Groupe : Membres Messages : 989 Inscrit : 22 Aug 2002 Lieu : 06220 VALLAURIS Membre no 3 217 |
Merci pour le retour.
Ableton n'est pas compatible avec AppleScript ce qui m'a obligé à avoir recours au GUI scripting qui émule les actions effectuées manuellement. Problème, quand on demande ce que contient une fenêtre la réponse est une magnifique liste vide. Du coup, vu que je récupérais une fenêtre standard et une fenêtre dialogue, j'ai considéré que ce dialogue signifiait la corruption du document testé. Ne connaissant rien à la dite application, je ne sais comment elle se comporte en présence d'un fichier correct. Pourriez-vous me faire parvenir un fichier ALS en bon état à l'adresse <koenigyan (AT) mac (POINT) com> ? Ça me permettrai de voir comment se comporte l'appli en fonction d'un fichier correct et éventuellement coder un autre mode d'identification basé sur une éventuelle signature présente au début des fichiers. Vérification faite, c'est plutôt le contraire de ce que j'indiquais. Mieux vaut utiliser les balises CODE (bouton ) pour éviter les coupures intempestives. L'édition ne change rien. Test de passage à la ligne : Balises CODE Code set aBundle to aBundle & "Frameworks:ApplicationServices.framework:Versions:Current:Frameworks:HIServices.framework:" Balises CODEBOX CODE set aBundle to aBundle & "Frameworks:ApplicationServices.framework:Versions:Current:Frameworks:HIServ ices.framework:" Merci. Je n'avais pas prêté attention à la présence du bouton dont l'icône reproduit quasiment celle d'Applescript. |
|
|
6 Apr 2020, 10:49
Message
#13
|
|
Macbidouilleur d'Or ! Groupe : Modérateurs Messages : 19 574 Inscrit : 22 Jul 2004 Lieu : Louvain-la-Neuve (Gaule Gelbique) Membre no 21 291 |
[…] à l'adresse <koenigyan (AT) mac (POINT) com> Je soupçonne qu'il faut ajouter un v entre y et an dans l'adresse indiquée… -------------------- ¶ MacBook Pro 14’’ 2021, M1 Pro, 16 Go/1 To – macOS 12.6 “Monterey” ¶ MacBook Pro 15’’ mi-2010 Core i5 2,53 GHz, 8 Go/SSD Samsung 860EVO 1 To – Mac OSX 10.6.8 ¶ Power Macintosh G3 beige de bureau, rev.1 @ 233MHz, 288 Mo/4Go – MacOS 9.1 + carte PCI IDE/ATA Tempo 66 Acard 6260 avec HD interne Maxtor 80 Go + graveur interne CDRW/DVD LG GCC-4520B + tablette A4 Wacom UD-0608-A + LaCie ElectronBlueIV 19" + HP ScanJet 6100C ¶ B-Box 3 + HP LaserJet 4000 N
¶ La recherche dans MacBidouille vous paraît obscure ? J'ai rédigé une proposition de FAQ. Le moteur logiciel a un peu changé depuis mais ça peut aider quand même. … Les corsaires mettent en berne… |
|
|
6 Apr 2020, 12:19
Message
#14
|
|
Nouveau Membre Groupe : Membres Messages : 22 Inscrit : 5 Sep 2012 Membre no 178 669 |
Le dossier étant légèrement trop volumineux pour être joint directement au message, voici un lien pour le télécharger : https://fromsmash.com/YMewk6-UjU-dt
Je pense que vous devriez pouvoir le lire même avec la version d'essai. J'y ai simplement mis une rythmique avec un instrument fourni par le logiciel pour que ce ne soit pas un dossier vide. Edit : je n'avais pas fait attention à votre adresse email. Je vous l'envoie par ce biais également. Ce message a été modifié par zorkwolf - 6 Apr 2020, 12:22. |
|
|
6 Apr 2020, 14:07
Message
#15
|
|
Macbidouilleur de vermeil ! Groupe : Membres Messages : 989 Inscrit : 22 Aug 2002 Lieu : 06220 VALLAURIS Membre no 3 217 |
[…] à l'adresse <koenigyan (AT) mac (POINT) com> Je soupçonne qu'il faut ajouter un v entre y et an dans l'adresse indiquée… Merci Elle est bien bonne, voilà que je ne sais plus taper mon prénom Ayant reçu le fichier exemple j'ai pu améliorer le script ce qui va me permettre de tester les balises Code [code]---------------------------------------------------------------- use AppleScript version "2.5" use framework "Foundation" use scripting additions -- Yvan KOENIG (VALLAURIS, France) lundi 6 avril 2020 14:25:22 ---------------------------------------------------------------- property |⌘| : a reference to current application my Germaine() on Germaine() set ableton to ((path to applications folder as string) & "Ableton Live 10 Trial.app:") as «class furl» -- Éditer le nom de l'application set p2d to path to desktop set sourceFolder to (choose folder "Sélectionner le dossier à analyser" default location p2d) as string set junkFolder to (choose folder "Sélectionner le dossier où ranger les corrompus" default location p2d) as string -- Édité pour ne plus utiliser un dossier qui peut ne pas exister try set aBundle to ((path to library folder from system domain as string) & "Frameworks:ApplicationServices.framework:Versions:Current:Frameworks:HIServices.framework:") as «class furl» set red_loc to localized string "Label_Name_6" from table "Labels" in bundle aBundle -- récupère la chaîne locale pour "Red" on error set red_loc to "rouge" -- version française du nom de couleur end try set fileManager to a reference to |⌘|'s NSFileManager's defaultManager() set skipsPackageDescendants to |⌘|'s NSDirectoryEnumerationSkipsPackageDescendants as integer --> 2 set skipsHiddenFiles to |⌘|'s NSDirectoryEnumerationSkipsHiddenFiles as integer --> 4 set theOptions to skipsPackageDescendants + skipsHiddenFiles set NSURLIsDirectoryKey to |⌘|'s NSURLIsDirectoryKey set keysToRequest to {NSURLIsDirectoryKey} tell me to display notification "Commence à scanner le dossier" & linefeed & (current date) set theURL to (|⌘|'s NSArray's arrayWithObject:(sourceFolder as «class furl»))'s firstObject() -- test désactivé parce que, étant défini par Choose folder, le dossier existe -- if (theURL's checkResourceIsReachableAndReturnError:(missing value)) as boolean is false then error "The folder “" & sourceFolder & "” isn't available." set junkURL to (|⌘|'s NSArray's arrayWithObject:(junkFolder as «class furl»))'s firstObject() -- test désactivé parce que, étant défini par Choose folder, le dossier existe -- if (junkURL's checkResourceIsReachableAndReturnError:(missing value)) as boolean is false then error "The folder “" & junkFolder & "” isn't available." set allURLs to (fileManager's enumeratorAtURL:theURL includingPropertiesForKeys:keysToRequest options:theOptions errorHandler:(missing value))'s allObjects() if allURLs is equal to missing value then error (theError's localizedDescription() as text) tell me to display notification "trouvé " & (count allURLs) & " URLs." & linefeed & (current date) set theFormat to "(self.path ENDSWITH[c] '.ALS')" -- pour lister les fichiers dont le nom se termine par ".ALS" set thePredicate to |⌘|'s NSPredicate's predicateWithFormat:theFormat set fichiersALS to (allURLs's filteredArrayUsingPredicate:thePredicate) tell me to display notification "trouvé " & (count fichiersALS) & " fichiers .ALS." & linefeed & (current date) repeat with aURL in fichiersALS set aFurl to aURL as «class furl» tell application "Finder" to open aFurl using ableton tell application "System Events" repeat -- Attends que l'application soit ouverte if exists process "Live" then exit repeat delay 0.1 end repeat tell process "Live" set frontmost to true -- Assure que le process va pouvoir exécuter les actions repeat set nbWindows to count windows if nbWindows > 0 then exit repeat delay 0.1 end repeat set theSubroles to subrole of windows --> {"AXDialog", "AXUnknown", "AXUnknown"} -- pour un document corrompu --> {"AXStandardWindow", "AXUnknown"} -- pour un document sain if theSubroles contains "AXDialog" then -- attribue un double tag set {theResult, theError} to (aURL's setResourceValue:{red_loc, "ALS corrompu"} forKey:(current application's NSURLTagNamesKey) |error|:(specifier)) -- déplace le fichier (my moveFromURL:aURL toFolder:junkURL) else -- fichier valide end if -- Arrive ici dans les deux cas pour fermer les fenêtres try -- En principe on ne devrait pas générer d'erreur mais je joue la sécurité set nbWindows to count windows repeat 5 times -- En principe, nbWindows times suffirait mais je joue la sécurité if not (exists window 1) then exit repeat -- plus propre, ne génère pas de message d'erreur tell window 1 if exists button 1 then click button 1 else keystroke return end if end tell delay 0.2 end repeat on error errmsg number errNbr -- tell application "Finder" to display dialog errmsg -- "Erreur dans System Events : Il est impossible d’obtenir process \"Live\"." end try end tell -- process "Live" end tell -- "System Events"… end repeat end Germaine #===== on moveFromURL:sourceURL toFolder:junkURL set theFileManager to |⌘|'s NSFileManager's |defaultManager|() set origName to sourceURL's |lastPathComponent|() as string --> "trucmuche.ALS" tell (current date) to set stamp to (((its year) * 10000 + (its month) * 100 + (its day)) as text) & "_" & text 2 thru -1 of ((1000000 + (its hours) * 10000 + (its minutes) * 100 + (its seconds)) as text) -- par sécurité, intercale date-time pour éviter doublons set destName to (text 1 thru -5 of origName) & "_" & stamp & ".ALS" --> "trucmuche_20200404_154332.ALS" set destinationURL to junkURL's URLByAppendingPathComponent:destName set {theResult, theError} to (theFileManager's moveItemAtURL:sourceURL toURL:destinationURL |error|:(reference)) end moveFromURL:toFolder: #===== Bien entendu vous pouvez réutiliser le code recherchant les fichiers pour d'autres tâches. Les instructions ASObjC sont verbeuses mais je préfère çà aux incantations "do shell script" |
|
|
10 Dec 2020, 12:54
Message
#16
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 936 Inscrit : 23 Nov 2002 Membre no 4 808 |
bonjour, déterrage…J'ai un peu le meme blem, des fichiers récupérés sur disque effacé, beaucoup de fichiers, et plusieurs applications en jeu …Pour les images c'est assez simple, faut juste dédoublonner, c'est fait et les fichiers abimés sont directement visible avec n'importe quel catalogueur.
Par contre j'ai des docs FP3, FP5 et FP7 (filemaker pro), pdf ; doc et d'autres…J'ai essayé d'adapter le script, mais je ne suis pas doué.Je voudrais juste savoir ce qu'il faut modifier pour adapter, pour les '.doc' par exemple, les fichiers sont dans un dossier nommé 'docs' du disque '1001' et les applications dans le dossier éponyme du disque 'Mini_sys'.Merci d'avance -------------------- MBP 15 unibody (circa 2010) 2,4 Ghz , 4Go ssd 256 Go, dual boot OSX10.9.5-Linux mint
MacMini late 2012, i7 2,3Ghz, 16Go, 2 ssd 1to, OSX Sonoma 14.6.1 dual boot Sequoia 15 (OpencoreLegacy Patcher 2.1) |
|
|
11 Dec 2020, 18:24
Message
#17
|
|
Macbidouilleur de vermeil ! Groupe : Membres Messages : 989 Inscrit : 22 Aug 2002 Lieu : 06220 VALLAURIS Membre no 3 217 |
bonjour, déterrage…J'ai un peu le meme blem, des fichiers récupérés sur disque effacé, beaucoup de fichiers, et plusieurs applications en jeu …Pour les images c'est assez simple, faut juste dédoublonner, c'est fait et les fichiers abimés sont directement visible avec n'importe quel catalogueur. Par contre j'ai des docs FP3, FP5 et FP7 (filemaker pro), pdf ; doc et d'autres…J'ai essayé d'adapter le script, mais je ne suis pas doué.Je voudrais juste savoir ce qu'il faut modifier pour adapter, pour les '.doc' par exemple, les fichiers sont dans un dossier nommé 'docs' du disque '1001' et les applications dans le dossier éponyme du disque 'Mini_sys'.Merci d'avance Je vais essayer de concocter une version testant les pdf avec Aperçu (pour Applescript ça s'écrit "Preview"). Comme je vous l'ai indiqué dans un message perso, actuellement je n'ai pas les idées bien claires mais je devrais m'en sortir rapidement. Pour les fichiers FileMaker ou Merdosoft il vous faudra adapter le code destiné à Aperçu car je n'ai pas ces applications. Heureusement, il me semble qu'en cas de fichier corrompu elles se comportent plus ou moins comme Aperçu ce qui est plus facile à traiter que le cas Ableton. Voilà qui semble OK pour Aperçu. Code ---------------------------------------------------------------- use AppleScript version "2.5" use framework "Foundation" use scripting additions -- Yvan KOENIG (VALLAURIS, France) lundi 6 avril 2020 14:25:22 -- 2020/12/11 traitement des PDFs avec Preview (Aperçu) ---------------------------------------------------------------- property |⌘| : a reference to current application my Germaine() on Germaine() -- définition du chemin d'accès à l'application à employer set usedApp to ((path to applications folder as string) & "Preview.app:") as «class furl» -- Éditer le nom de l'application set usedProcess to "Preview" -- Éditer le nom du processus -- définition de l'extension des fichiers à analyser set theExt to "pdf" -- set theExtUpper to "PDF" -- inutile set p2d to path to desktop -- définition du chemin d'accès au dossier contenant les fichiers à analyser set sourceFolder to (choose folder "Sélectionner le dossier à analyser" default location p2d) as string -- définition du chemin d'accès au dossier de stockage des corrompus set junkFolder to (choose folder "Sélectionner le dossier où ranger les corrompus" default location p2d) as string -- Édité pour ne plus utiliser un dossier qui peut ne pas exister try set aBundle to ((path to library folder from system domain as string) & "Frameworks:ApplicationServices.framework:Versions:Current:Frameworks:HIServices.framework:") as «class furl» set red_loc to localized string "Label_Name_6" from table "Labels" in bundle aBundle -- récupère la chaîne locale pour "Red" on error set red_loc to "rouge" -- version française du nom de couleur end try set fileManager to a reference to |⌘|'s NSFileManager's defaultManager() set skipsPackageDescendants to |⌘|'s NSDirectoryEnumerationSkipsPackageDescendants as integer --> 2 set skipsHiddenFiles to |⌘|'s NSDirectoryEnumerationSkipsHiddenFiles as integer --> 4 set theOptions to skipsPackageDescendants + skipsHiddenFiles set NSURLIsDirectoryKey to |⌘|'s NSURLIsDirectoryKey set keysToRequest to {NSURLIsDirectoryKey} tell me to display notification "Commence à scanner le dossier" & linefeed & (current date) set theURL to (|⌘|'s NSArray's arrayWithObject:(sourceFolder as «class furl»))'s firstObject() -- test désactivé parce que, étant défini par Choose folder, le dossier existe -- if (theURL's checkResourceIsReachableAndReturnError:(missing value)) as boolean is false then error "The folder “" & sourceFolder & "” isn't available." set junkURL to (|⌘|'s NSArray's arrayWithObject:(junkFolder as «class furl»))'s firstObject() -- test désactivé parce que, étant défini par Choose folder, le dossier existe -- if (junkURL's checkResourceIsReachableAndReturnError:(missing value)) as boolean is false then error "The folder “" & junkFolder & "” isn't available." set allURLs to (fileManager's enumeratorAtURL:theURL includingPropertiesForKeys:keysToRequest options:theOptions errorHandler:(missing value))'s allObjects() if allURLs is equal to missing value then error (theError's localizedDescription() as text) tell me to display notification "trouvé " & (count allURLs) & " URLs." & linefeed & (current date) -- ATTENTION, les formats sont sensibles à la casse -- set theFormat to "(self.pathExtension =[c] '" & theExt & "') OR (self.pathExtension =[c] '" & theExtUpper & "')" -- pour lister les fichiers dont le nom se termine par theExt -- OOPS, avec [c] le format n'est PAS sensible à la casse. set theFormat to "(self.pathExtension =[c] 'pdf')" -- pour lister les fichiers dont le nom se termine par theExt set thePredicate to |⌘|'s NSPredicate's predicateWithFormat:theFormat set fichiersReconnus to (allURLs's filteredArrayUsingPredicate:thePredicate) tell me to display notification "trouvé " & (count fichiersReconnus) & " fichiers ." & theExt & "." & linefeed & (current date) repeat with aURL in fichiersReconnus set aFurl to aURL as «class furl» tell application "Finder" to open aFurl using usedApp tell application "System Events" repeat -- Attends que l'application soit ouverte if exists process usedProcess then exit repeat delay 0.1 end repeat tell process usedProcess set frontmost to true -- Assure que le process va pouvoir exécuter les actions repeat set nbWindows to count windows if nbWindows > 0 then exit repeat delay 0.1 end repeat set theSubroles to subrole of windows --> {"AXDialog", "AXUnknown", "AXUnknown"} -- pour un document corrompu --> {"AXStandardWindow", "AXUnknown"} -- pour un document sain if theSubroles contains "AXDialog" then -- attribue un double tag set {theResult, theError} to (aURL's setResourceValue:{red_loc, theExt & " corrompu"} forKey:(current application's NSURLTagNamesKey) |error|:(specifier)) -- déplace le fichier (my moveFromURL:aURL toFolder:junkURL nameExtension:theExt) else -- fichier valide end if -- Arrive ici dans les deux cas pour fermer les fenêtres try -- En principe on ne devrait pas générer d'erreur mais je joue la sécurité set nbWindows to count windows repeat 5 times -- En principe, nbWindows times suffirait mais je joue la sécurité if not (exists window 1) then exit repeat -- plus propre, ne génère pas de message d'erreur tell window 1 if exists button 1 then click button 1 else keystroke return end if end tell delay 0.2 end repeat on error errmsg number errNbr -- tell application "Finder" to display dialog errmsg -- "Erreur dans System Events : Il est impossible d’obtenir process \"Live\"." end try end tell -- process "Live" end tell -- "System Events"… end repeat end Germaine #===== on moveFromURL:sourceURL toFolder:junkURL nameExtension:theExt set theFileManager to |⌘|'s NSFileManager's |defaultManager|() set origName to sourceURL's |lastPathComponent|() as string --> "trucmuche.ALS" tell (current date) to set stamp to (((its year) * 10000 + (its month) * 100 + (its day)) as text) & "_" & text 2 thru -1 of ((1000000 + (its hours) * 10000 + (its minutes) * 100 + (its seconds)) as text) -- par sécurité, intercale date-time pour éviter doublons set destName to (text 1 thru -5 of origName) & "_" & stamp & "." & theExt --> "trucmuche_20200404_154332.ALS" set destinationURL to junkURL's URLByAppendingPathComponent:destName set {theResult, theError} to (theFileManager's moveItemAtURL:sourceURL toURL:destinationURL |error|:(reference)) end moveFromURL:toFolder:nameExtension: #===== Édité pour traiter les extensions minuscules ou majuscules. Re-édité car la modification précédente était inutile. Ce message a été modifié par KOENIG Yvan - 13 Dec 2020, 16:26. |
|
|
Nous sommes le : 26th September 2024 - 19:46 |