IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Automatisation : ouverture et tri de fichiers si endommagé [Résolu]
Options
zorkwolf
posté 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 smile.gif ). 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 !! biggrin.gif

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.
Go to the top of the page
 
+Quote Post
KOENIG Yvan
posté 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:

#=====
Go to the top of the page
 
+Quote Post
zorkwolf
posté 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
Go to the top of the page
 
+Quote Post
KOENIG Yvan
posté 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.
Go to the top of the page
 
+Quote Post
zorkwolf
posté 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 biggrin.gif

Au plaisir !!

zorkwolf

Ce message a été modifié par zorkwolf - 4 Apr 2020, 18:10.
Go to the top of the page
 
+Quote Post
KOENIG Yvan
posté 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.
Go to the top of the page
 
+Quote Post
baron
posté 5 Apr 2020, 14:05
Message #7


Macbidouilleur d'Or !
*****

Groupe : Modérateurs
Messages : 19 302
Inscrit : 22 Jul 2004
Lieu : Louvain-la-Neuve (Gaule Gelbique)
Membre no 21 291



[H.S.]
Citation (KOENIG Yvan @ 5 Apr 2020, 14:08) *
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…
Go to the top of the page
 
+Quote Post
KOENIG Yvan
posté 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



Citation (baron @ 5 Apr 2020, 14:05) *
[H.S.]
Citation (KOENIG Yvan @ 5 Apr 2020, 14:08) *
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.

Go to the top of the page
 
+Quote Post
KOENIG Yvan
posté 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
Go to the top of the page
 
+Quote Post
baron
posté 5 Apr 2020, 19:14
Message #10


Macbidouilleur d'Or !
*****

Groupe : Modérateurs
Messages : 19 302
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…
Go to the top of the page
 
+Quote Post
zorkwolf
posté 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 !
Go to the top of the page
 
+Quote Post
KOENIG Yvan
posté 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.

Citation (baron @ 5 Apr 2020, 19:14) *
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.
Go to the top of the page
 
+Quote Post
baron
posté 6 Apr 2020, 10:49
Message #13


Macbidouilleur d'Or !
*****

Groupe : Modérateurs
Messages : 19 302
Inscrit : 22 Jul 2004
Lieu : Louvain-la-Neuve (Gaule Gelbique)
Membre no 21 291



Citation (KOENIG Yvan @ 6 Apr 2020, 11:42) *
[…] à 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…
Go to the top of the page
 
+Quote Post
zorkwolf
posté 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.
Go to the top of the page
 
+Quote Post
KOENIG Yvan
posté 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



Citation (baron @ 6 Apr 2020, 10:49) *
Citation (KOENIG Yvan @ 6 Apr 2020, 11:42) *
[…] à 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 rolleyes.gif

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"
Go to the top of the page
 
+Quote Post
ades
posté 10 Dec 2020, 12:54
Message #16


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 811
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 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.4 (OpencoreLegacy 1.2.1 1.3.0 1.4.0 1.4.1 1.4.2)
Go to the top of the page
 
+Quote Post
KOENIG Yvan
posté 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



Citation (ades @ 10 Dec 2020, 13:54) *
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.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 19th March 2024 - 06:35