Drag'n drop

  • Créateur du sujet Créateur du sujet Dr4x
  • Date de début Date de début

Dr4x

Membre confirmé
14 Mai 2009
11
0
35
Bonsoir à tous,
je viens à vous car en effectuant mes tâches répétitives et ayant entendu parlé d'applescript, je me semandé s'il n'y avait pas de petits programmes pouvant m'aider:
je voudrais que lorsque je fais glisser un fichier sur l'application, celui se "dédouble" dans un dossier choisit et que l'initial soit envoyé directement dans la corbeille. Je pense que c'est possible, seulement je ne comprend pas grand chose à Javascript et tout autres systèmes de langages.
Merci d'avance.
 
Bonsoir à tous,
je viens à vous car en effectuant mes tâches répétitives et ayant entendu parlé d'applescript, je me semandé s'il n'y avait pas de petits programmes pouvant m'aider:
je voudrais que lorsque je fais glisser un fichier sur l'application, celui se "dédouble" dans un dossier choisit et que l'initial soit envoyé directement dans la corbeille. Je pense que c'est possible, seulement je ne comprend pas grand chose à Javascript et tout autres systèmes de langages.
Merci d'avance.
Bonjour

Un AppleScript fait ça sans problème (c'est son travail de faire des taches répétitives).

Ce qu'il faut savoir:

Des fichiers et des dossiers à placer dans le dossier de réception?
Déplacer plusieurs éléments en un seul Glisser-Déposer?
Ce que tu déplace est sur le même volume que le dossier de réception (si sur le même volume pas d'effacement à faire)?
Si des noms en double (mais non identique le contenu) on les acceptes?

@+
 
Bonjour et merci de ta réponse.
J'ai trouvé comment réaliser ce code, mais n'ayant pas accès au Mac en ce moment, je ne peut pas inscrire le code, je le ferais donc la semaine prochaine au cas ou cela pourrait aider certains internautes :).

Bonne journée.
 
Bonjour et merci de ta réponse.
J'ai trouvé comment réaliser ce code, mais n'ayant pas accès au Mac en ce moment, je ne peut pas inscrire le code, je le ferais donc la semaine prochaine au cas ou cela pourrait aider certains internautes :).

Bonne journée.
Bonjour

C'est bien d'avoir la gentillesse de répondre.

J'ai détourné un de mes codes pour voir si cela été possible de répondre à ta question.

Ce que fait mon code (je sais tu va trouver débile ma façon de comprendre ta demande).

Lors de la première utilisation demande d'écrire le chemin du dossier de réception.

Mémorise pour toutes les prochaines utilisations ce chemin et quitte .

sélectionner l'application une deuxième fois l'application en Glisser-Déposer.

Faire un Glisser-Déposer des éléments à déplacer (Fichiers, bundles ou dossiers, plusieurs à la fois possible).

Regarde si un nom identique de l'élément lue existe dans le dossier de réception.
Non déplace la sélection
Oui ajoute un N° pour le différencier et le déplace (la numérotation ce fait par noms identiques et non par nombre de doublons).

Si les 2 éléments sont sur le même volume que le déplacement d'exécuté (si vous utilisez pas la touche alt).
Si les 2 éléments sont sur des volumes différents, alors c'est une copie de faite et élimine l'original.

Si déplacement du dossier de réception, retour a lors de la première utilisation

Pour l'élimination je passe par le terminal, ça évite d'avoir à vider la corbeille.

Ca a été un plaisir de te répondre.

Cordialement

A une prochaine fois sur une autre question. :)

@+
 
Re-Bonjour!

J'ai maintenant terminé cette .app et te remercie encore pour tes réponses.
Cependant, je rencontre un nouveau problème pour une autre :p.
Je m'explique: j'établis une liste (dans ce cas-là de personnes), avec la possibilité de choisir une ou plusieurs personnes de cette liste. Une fois choisie (la/les personnes) j'aimerai leur envoyer un dossier qui viendrait se placer dans "tel dossier" de leur poste, s'il n'existe pas au préalable, sinon il le renomme avec un 1 (ou autre..) à la fin de son nom. Pour 1 personne ça fonctionne:
je déclare une variable Personne1 to text item 1 of the result --définit une personnede la liste donc.
Puis celle du chemin "par defaut" ou doit se placer le dossier
Je fait appel au "Finder", si le dossier n'existe pas, le creer et y envoyer le dossier.


Pour 2 ça se complique :confused:. Sachant que je compte entrer une vingtaine de personnes, faut-il que je déclare les 20 personnes de la même façon que je l'ai fait pour la 1ère, c'est à dire : set personne1 to text item1 of the result, puis pareil pour personne2 et ainsi desuite ? Puis en utilisant des "if not (exist folder...then make new folder..." cela semble devenir très long. Sans parler de la copy, si 1destinataire,ça va, mais s'il y en a 25, faire une commande de copy pour les 25 personnes, ça rallonge considérablement le script, et sa lisibilité. Je me trompe ? N'y a t-il pas de "raccourcis" pour ces commandes répétitives?
Je précise enfin que cette .app serait utilisée en intranet.

Merci de tes réponses ;).
 
Re-Bonjour!

Pour 2 ça se complique :confused:. Sachant que je compte entrer une vingtaine de personnes, faut-il que je déclare les 20 personnes de la même façon que je l'ai fait pour la 1ère, c'est à dire : set personne1 to text item1 of the result, puis pareil pour personne2 et ainsi desuite ? Puis en utilisant des "if not (exist folder...then make new folder..." cela semble devenir très long. Sans parler de la copy, si 1destinataire,ça va, mais s'il y en a 25, faire une commande de copy pour les 25 personnes, ça rallonge considérablement le script, et sa lisibilité. Je me trompe ? N'y a t-il pas de "raccourcis" pour ces commandes répétitives?
Je précise enfin que cette .app serait utilisée en intranet.

Merci de tes réponses ;).
Bonjour

Tu ne fait la commande que pour une personne, tu la place dans une boucle Repeat pour qu'elle soit utilisée pour le nombre de personnes sélectionnées.

Le problème que tu vas avoir, c'est que tu ne connaît pas obligatoirement le contenu du dossier de réception.

dossier XXX, tu va créer alors dossier XXX[1], si il existe?
Il faudrait alors connaître le contenue de chaque dossier client pour faire la numérotation.

Le plus simple c'est de regarder le contenu du dossier client, regarder combien de noms identiques et alors faire la numérotation.

Le plus simple c'est d'envoyer ton code pour voir ce que l'on peut faire .

@+
 
Merci pour cette réponse ultra-rapide :)

Déjà ta première suggestion semble être ce que je demande. Je vais donc essayer cela cet après-midi.
Pour le renommage du dossier, cela fonctionne, ce qu'il fait, c'est qu'il renomme automatiquement un dossier s'il existe déjà avec un 1 à sa fin. Donc ça, ca va! :p
J'en revient donc à la source de mon problème: plusieurs personnes, de 2 à X.
Ce que j'ai fais pour 1 personne:
set personne1 to text item 1 of the result
set cheminatraiter to "Dossier où je souhaite l'envoyer:"&"personne1 & ":" & NomDossier

Tell application "Finder"
activate

if not (exists folder NomDossier of folder Personne1 of folder "..." of disk "...") then
make new folder at folder Personne1 of folder "..." of disk "..." with properties {name:NomDossier}
end if
do shell script "cp -R " & quoted form of the POSIX path of chemin_source & espace & quoted form of the POSIX path of cheminatraiter


Mais je ne sais pas trop comment faire avec un repeat... :/ donc avec plusieurs personnes.


Merci de me répondre si vite!
 
Merci pour cette réponse ultra-rapide :)

Déjà ta première suggestion semble être ce que je demande. Je vais donc essayer cela cet après-midi.
Pour le renommage du dossier, cela fonctionne, ce qu'il fait, c'est qu'il renomme automatiquement un dossier s'il existe déjà avec un 1 à sa fin. Donc ça, ca va! :p
J'en revient donc à la source de mon problème: plusieurs personnes, de 2 à X.
Ce que j'ai fais pour 1 personne:
set personne1 to text item 1 of the result
set cheminatraiter to "Dossier où je souhaite l'envoyer:"&"personne1 & ":" & NomDossier

Tell application "Finder"
activate

if not (exists folder NomDossier of folder Personne1 of folder "..." of disk "...") then
make new folder at folder Personne1 of folder "..." of disk "..." with properties {name:NomDossier}
end if
do shell script "cp -R " & quoted form of the POSIX path of chemin_source & espace & quoted form of the POSIX path of cheminatraiter


Mais je ne sais pas trop comment faire avec un repeat... :/ donc avec plusieurs personnes.


Merci de me répondre si vite!
Bonjour

Pour te donner une idée (de toute façon je sais pas ce que tu cherche exactement).

2 boucles repeat pour t'expliquer ma façon de coder pour n'utiliser qu'une commande pour exécuter plusieurs fois le même ordre sans alourdir le script.

Bloc de code:
set chemins to {"DD1:Users:Jean:Documents:", "DD2:Users:François:Documents:", "DD3:Users:Albert:Documents:", "DD4:Users:Claude:Documents:", "DD5:Users:Franck:Documents:"}

set x to choose from list {"Jean", "François", "Albert", "Claude", "Franck"} default items {"Jean"} with multiple selections allowed

set liste to ""

repeat with nom in x -- Lecture des prénoms en mémoire
	repeat with i from 1 to 5 -- Recherche du prénom sélectionné dans la liste des divers chemins
		if item i of chemins contains nom then -- Si c'est le bon chemin
			set liste to liste & item i of chemins & return -- Place dans la liste où exécute ton code
			exit repeat -- Passe au prénom suivant si c'est pas la fin des prénoms
		end if
	end repeat
end repeat

display dialog liste

Je sais c'est inutile pour toi, mais faut te comprendre. :)

Pour le renommage avec 1 on en reparleras plus tard (il suffit qu'un volume garde les 2 pour te créer un problème).

Part du principe, ce qui créer des problèmes sur un Mac c'est ce qui se trouve entre le clavier et le siège utilisé devant ce clavier. :D :D :D

PS: tu m'envoie ton code en MP, (je te promet de pas le publier) pour savoir exactement ce que tu cherche à faire.

J'aime bien comprendre si mes explications sont totalement débiles ou utiles (le rôle d'un forum c'est d'aider à résoudre un problème et la tu me fout des doutes).
@+
 
Bonjour à toi, en ce lundi (trop) matinal!

Encore merci de me répondre, de plus avec des réponses pertinentes malgré le fait que je ne sois pas très clair. Je vais d'ailleurs imbriquer ta réponse à mon script, car elle semble bonne et répondre à mes attentes. Je t'envoie le script en MP si cela ne fonctionne pas. Mais tu as compris ce que j'attendais.
J'ai en fait, au lieu de mettre le chemin où envoyer de chaque personne mit le chemin "par défaut" et jouté:
& Personne & ":" & NumeroDossier pour éviter la redondance. Cela fonctionne pour une personne, je pense que ça ne changera pas pour plusieurs.
Encore merci pour tes réponses.

---------- Nouveau message ajouté à 09h47 ---------- Le message précédent a été envoyé à 09h20 ----------

Voilà, tout fonctionne comme sur des roulettes, à l'exception d'une chose...Et oui, désolé Ceslinstinct :(. Dans ma liste de personnes, j'y ai mit des "Groupes" puis à la suite cette liste (Regroupant donc des personnes et des listes de perosnnes), j'ai fait ceci:
set item position-du-groupe-dans-la-liste of Ma_liste to "Groupe1" & {"et les personnes affectées à ce groupe"}
Cependant dans la fenêtre me listant les personnes et les groupes, tout est bien sauf qu'à la suite des groupes, il ya toutes les personnes, ce que je voudrais éviter. En fait, j'aimerai que les personnes affectées à un groupe le soient implicitement, je voudrais cacher cette "sous-liste" des groupes dans la fenêtre des personnes. Je ne sais pas si j'ai étais très clair... (Une fois de plus me direz-vous? :p)

Un grand merci Ceslinstinct. Et à très bientôt (je l'espère :p). Bonne journée!

Ceslinstinct, je te send mon script pour que tu n'ai pas l'impression d'avoir répondu dans le brouillard ? :siffle: