0 votes

Automator : Sélectionner un seul fichier parmi les nombreux fichiers d'un dossier. script nécessaire ?

J'ai un dossier avec différents 100 fichiers texte rtf dans un dossier.

J'aimerais qu'Automator prenne le contenu d'un fichier texte et l'envoie par courrier une fois par jour aux mêmes adresses, sans envoyer deux fois le même texte.

Comme je suis un débutant et que je ne trouve pas le moyen de filtrer un seul fichier rtf avec les actions prédéfinies d'Automator, je pense que je dois créer un script.

Ce que j'ai jusqu'à présent :

Nouvelle application :

  1. Find Finder-Item : J'ai choisi le dossier avec les fichiers. Condition : L'extension du fichier est rtf -> maintenant j'ai tous les (3 test-)rtf comme résultat.

(*)

  1. Ouvrez le Finder-Item : Ouvrir avec l'application par défaut
  2. Obtenir le contenu d'un document TextEdit
  3. Nouveau message de courrier

Ce que fait ce flux de travail : Il ouvre tous les fichiers rtf dans TextEdit. Ensuite, une nouvelle fenêtre de courrier électronique s'ouvre et affiche le contenu du dernier fichier texte ouvert. Bien sûr, il ne l'envoie pas.

Je pense que je dois inclure une étape/script là où se trouve le (*), pour que Automator ait un fichier rtf spécifique à passer aux étapes suivantes. Pouvez-vous m'aider à trouver cette étape ou me montrer comment créer un script ? Ou peut-être connaissez-vous une autre solution ?

enter image description here

1voto

user3439894 Points 52496

Lorsque l'on veut choisir de manière aléatoire dans un groupe de fichiers pour envoyer son contenu sous forme de courrier électronique, tout en veillant à ce que le contenu de chaque fichier ne soit utilisé qu'une seule fois, il faut maintenir un fichier de type liste de noms de fichiers à partir duquel le contenu a déjà été envoyé. Il existe plusieurs façons de procéder. liste peuvent être créés, accessibles et maintenus.

Rester à l'écart de Automator et en utilisant AppleScript pour l'ensemble du processus, le plus simple serait en tant que AppleScript property variable Toutefois, une AppleScript property variable obtient réinitialiser si le script es recompilé en scriptÉditeur et ou sauvé à nouveau après qu'il ait été initialement sauvegardé .

Ce n'est pas nécessairement un problème, si une fois que la script a été correctement configuré pour répondre aux besoins et fonctionne correctement pendant les tests, il est ensuite sauvegardé en tant qu'un application et non modifié o sauvé à nouveau après que la version initiale ait été sauvegardé comme un application . Si cela peut être un problème, alors le liste devra être sauvegardé en tant que fichier du disque . (Personnellement, je choisirais d'utiliser l'option fichier du disque .)

Sauver le liste de noms de fichiers dont le contenu a déjà été envoyé par e-mail en tant que fichier du disque peut également se faire de plusieurs manières. Vous devez essentiellement choisir l'une des méthodes possibles et la coder en conséquence.

Les éléments suivants AppleScript code montre deux façons d'accomplir la tâche globale. La première, qui utilise un AppleScript property variable et la seconde en utilisant un fichier du disque pour maintenir la liste .

  • Nota: Dans l'un de mes commentaires, j'ai demandé : "Les fichiers doivent-ils être en Rich Text ou peuvent-ils être en Plain Text ?". Texte en clair le fichier n'aurait pas besoin d'être ouvert dans l'application GUI pour récupérer le contenu, alors qu'avec Texte enrichi il faudrait l'ouvrir en .e.g. TextEdit pour récupérer le contenu. Ne pas avoir à le faire par l'intermédiaire du GUI est plus rapide et visuellement moins gênante. De plus, si cela est fait dans Automator en utilisant le Obtenir le contenu d'un document TextEdit action il récupère le contenu sous la forme texte clair de toute façon. Ainsi, il est en fait avantageux d'utiliser Texte en clair les dossiers sur Texte enrichi pour commencer. Ces exemples sont codés pour utiliser Texte enrichi y TextEdit avec une modification montrée ensuite si l'on utilise Texte en clair .

Dans le premier exemple AppleScript code il y a quelques variables que vous devrez définir :

  • thisFolder - L'emplacement du dossier contenant les 100 fichiers.
  • theRecipientName - Le nom du destinataire de l'e-mail.
  • theRecipientAddress - L'adresse e-mail du destinataire de l'e-mail.
  • theSubject - Le sujet du message électronique.

Dans le deuxième exemple AppleScript code en plus de la variables montré ci-dessus :

  • theAlreadySentListFilename - L'emplacement et le nom du fichier contenant les noms de fichiers à partir desquels le contenu a déjà été envoyé.

Le reste de la script est codé d'une manière ( tokenized ) pour travailler avec ces variables et autres set au sein de la script . En outre, le tell application "Mail" bloc de code est codé pour envoyer le message automatiquement, cependant il a été commenté, jusqu'à ce que les tests soient faits et ou si vous ne voulez pas envoyer automatiquement. Décommentez en conséquence.

Pour utiliser ce script en scriptÉditeur créez un nouveau document et enregistrez-le sous le nom de application en /Applications en le nommant, par exemple, comme suit 100 messages à envoyer.app .

Ensuite, copiez et collez l'exemple AppleScript code ci-dessous dans le 100 messages à envoyer.app en scriptÉditeur et a touché le Compiler bouton sur le Barre d'outils .

Modifiez le variables mentionné plus haut.

Sauvegarder le application et tester de l'intérieur scriptÉditeur .

Une fois les tests terminés, cliquez sur le bouton Compiler bouton sur le Barre d'outils pour réinitialiser le theAlreadySentList AppleScript property variable à un vide liste puis enregistrez et fermez la page 100 messages à envoyer.app afin de ne pas réinitialiser le theAlreadySentList AppleScript property variable une fois le mode de production lancé.

Premier exemple AppleScript code :

--  ### Folder Path Variable

--  # Set the location of the folder containing the 100 files.
--  # NOTE: All 100 files must be in the same individual folder.

set thisFolder to (path to documents folder as text) & "100 Messages to Send"

--  ### Mail Variables

set theRecipientName to "John Doe"
set theRecipientAddress to "johndoe@domain.com"
set theSubject to "Hello World"
--  # Leave the following as 'missing value'.
set theMessageContent to missing value

--  ##### DO NOT modify below this line unless necessary. #####

--  ### Some Other Variables

--  # The property variable  'theAlreadySentList',  is a list of 
--  # filenames from which the messages have already been sent.
--  # The value of this property is maintained so long as
--  # this script is not save again or recompiled after it
--  # has been originally saved for the first time.

property theAlreadySentList : {}
global thisFile

--  ### Handler

on chooseRandomFileFrom(thisFolder)
    tell application "Finder"
        set thisFile to some file of container thisFolder
    end tell
    return thisFile
end chooseRandomFileFrom

--  # Get the count of entries in the 'theAlreadySentList' list.
--  # This is used to display a message and break the 'repeat' loop
--  # once all 100 messages have been sent.

set theCount to (count of theAlreadySentList) as integer

--  # Choose a file at random.

set thisFileName to name of chooseRandomFileFrom(thisFolder)

--  # Evaluate the sent status of 'thisFileName' and respond accordingly.

repeat -- 200 times -- # Uncomment if you want a failsafe out of the 'repeat' loop.
    if theCount is equal to 100 then
        display dialog "All 100 messages have already been sent!" buttons {"OK"} default button 1
        exit repeat
    else if thisFileName is in theAlreadySentList then
        --  # Choose another file at random.
        set thisFileName to name of chooseRandomFileFrom(thisFolder)
    else
        --  # This file has not been used yet, process accordingly.
        set end of theAlreadySentList to thisFileName
        tell application "TextEdit"
            open thisFile
            activate
            delay 1 --# Adjust as necessary. Time must be given for the file to open before proceeding.
            set theMessageContent to text of front document
            close front document
        end tell
        tell application "Mail"
            activate
            set theMessage to make new outgoing message with properties {visible:true, subject:theSubject, content:theMessageContent}
            tell theMessage
                make new to recipient at end of to recipients with properties {name:theRecipientName, address:theRecipientAddress}
            end tell
            -- delay 1 --# Adjust as necessary. Uncomment to use this command.
            -- send theMessage --# Uncomment to use this command.
        end tell
        exit repeat
    end if
end repeat

Dans ce deuxième exemple AppleScript code , a fichier du disque est utilisé pour stocker le liste de noms de fichiers à partir duquel le contenu a déjà été envoyé sous forme de message électronique.

Pour utiliser ce script en scriptÉditeur créez un nouveau document et enregistrez-le sous le nom de application en /Applications en le nommant, par exemple, comme suit 100 messages à envoyer.app . Ceci est fait pour que vous puissiez ajouter un texte clair vers le fichier paquet d'applications à utiliser pour le liste de noms de fichiers déjà envoyé. (Je préfère conserver les fichiers d'assistance connexes dans le dossier de l'utilisateur. paquet d'applications .)

Après avoir enregistré le document comme un application Maintenant, ouvrez le paquet d'applications (en Finder , Cliquez à droite sur Contenu de l'emballage du spectacle ) à Contenu/Ressources/ et créer le, par exemple Messages envoyés Liste de noms de fichiers.txt comme un fichier vide, puis fermez le fichier paquet d'applications .

Ensuite, copiez et collez l'exemple AppleScript code ci-dessous dans l'e.g. 100 messages à envoyer.app en scriptÉditeur et a touché le Compiler bouton sur le Barre d'outils .

Modifiez le variables comme indiqué plus haut.

Sauvegarder le application et tester de l'intérieur scriptÉditeur .

Une fois les tests terminés, effacez les entrées de l'écran d'accueil. Messages envoyés Liste de noms de fichiers.txt de sorte qu'il s'agit d'un fichier vide lors de l'exécution de la commande application pour la première fois en mode production.


Deuxième exemple AppleScript code :

--  ### Folder Path Variable

--  # Set the location of the folder containing the 100 files.
--  # NOTE: All 100 files must be in the same individual folder.

set thisFolder to (path to documents folder as text) & "100 Messages to Send"

--  ### Mail Variables

set theRecipientName to "John Doe"
set theRecipientAddress to "johndoe@domain.com"
set theSubject to "Hello World"
--  # Leave the following as 'missing value'.
set theMessageContent to missing value

--  ### Sent Messages Filename List Location Variable

--  # Set the location and name of the file containing the 
--  # filenames from which the content has already been sent.

set myPath to POSIX path of (path to me as string)
set theAlreadySentListFilename to myPath & "Contents/Resources/Sent Messages Filename List.txt"

--  ##### DO NOT modify below this line unless necessary. #####

--  ### Some Other Variables

global thisFile
global theAlreadySentList
set theAlreadySentList to {}

--  ### Handlers

on buildListFromDiskFile(thisDiskFile)
    set thisContent to do shell script "cat " & quoted form of thisDiskFile
    repeat with thisParagraph in paragraphs of text in thisContent
        set end of theAlreadySentList to (thisParagraph as text)
    end repeat
end buildListFromDiskFile

on chooseRandomFileFrom(thisFolder)
    tell application "Finder"
        set thisFile to some file of container thisFolder
    end tell
    return thisFile
end chooseRandomFileFrom

--  # Load data from disk file for: 'theAlreadySentList'

buildListFromDiskFile(theAlreadySentListFilename)

--  # Get the count of entries in the 'theAlreadySentList' list.
--  # Used to display a message once all 100 messages have been sent.

set theCount to (count of theAlreadySentList) as integer

--  # Choose a file at random.

set thisFileName to name of chooseRandomFileFrom(thisFolder)

--  # Evaluate the sent status of 'thisFileName' and respond accordingly.

repeat -- 200 times -- # Uncomment if you want a failsafe out of the 'repeat' loop.
    if theCount is equal to 100 then
        display dialog "All 100 messages have already been sent!" buttons {"OK"} default button 1
        exit repeat
    else if thisFileName is in theAlreadySentList then
        --  # Choose another file.
        set thisFileName to name of chooseRandomFileFrom(thisFolder)
    else
        --  # This file has not been used yet, process accordingly.
        --  #
        --  # Add the filename to the list.
        do shell script "echo " & thisFileName & " >> " & quoted form of theAlreadySentListFilename
        --  # Get the content of the Rich Text file.
        tell application "TextEdit"
            open thisFile
            activate
            delay 1 --# Adjust as necessary. Time must be given for the file to open before proceeding.
            set theMessageContent to text of front document
            close front document
        end tell
        --  # Create the Mail Message (and Send it).
        tell application "Mail"
            activate
            set theMessage to make new outgoing message with properties {visible:true, subject:theSubject, content:theMessageContent}
            tell theMessage
                make new to recipient at end of to recipients with properties {name:theRecipientName, address:theRecipientAddress}
            end tell
            -- delay 1 --# Adjust as necessary. Uncomment to use this command.
            -- send theMessage --   # Uncomment to use this command.
        end tell
        exit repeat
    end if
end repeat

NOTE : Si vous voulez utiliser Texte en clair au lieu des fichiers Texte enrichi puis l'ensemble des fichiers tell application "TextEdit" bloc de code peut être remplacé par les deux lignes suivantes de code :

set thisFile to POSIX path of (thisFolder & ":" & thisFileName)
set theMessageContent to do shell script "cat " & quoted form of thisFile

Vous pouvez également modifier le commentaire qui se trouve au-dessus, -- # Get the content of the Rich Text file. , l'échange Rich con Plain .

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X