0 votos

Automatizador: Seleccionar sólo un archivo de los muchos que hay en una carpeta. ¿Se necesita un script?

Tengo una carpeta con diferentes 100 archivos de texto rtf en una carpeta.

Me gustaría que Automator tomara el contenido de un archivo de texto y lo enviara por correo una vez al día a las mismas direcciones de correo, sin enviar el mismo texto dos veces.

Como soy novato y no encuentro la forma de filtrar sólo un archivo rtf con las acciones predefinidas de Automator, creo que tengo que crear un script.

Lo que tengo hasta ahora:

Nueva aplicación:

  1. Find Finder-Item: Elegí la carpeta con los archivos. Condición: La extensión del archivo es rtf -> ahora tengo todos los (3 test-)rtf's como resultado.

(*)

  1. Abrir el Finder: Abrir con la aplicación por defecto
  2. Obtener el contenido del documento de TextEdit
  3. Nuevo mensaje de correo

Lo que hace este flujo de trabajo: Abre todos los archivos rtf en TextEdit. Luego se abre una nueva ventana de correo y muestra el contenido del último archivo de texto abierto. Por supuesto, no lo envía.

Creo que tengo que incluir un paso/script donde esté el (*), para que Automator tenga un archivo rtf específico que pasar a los siguientes pasos. ¿Puedes ayudarme a encontrar este paso o mostrarme cómo crear un script? ¿O tal vez usted sabe otra solución?

enter image description here

1voto

user3439894 Puntos 5883

Al querer elegir aleatoriamente entre un grupo de archivos para enviar el contenido de los mismos como un correo electrónico, asegurando al mismo tiempo que el contenido de cada archivo se utiliza sólo una vez, requiere mantener un lista de nombres de archivos desde el que ya se ha enviado el contenido. Hay varias maneras de que esto lista se puede crear, acceder y mantener.

No se puede evitar el uso de Automatizador y utilizando AppleScript para todo el proceso, lo más fácil sería como AppleScript property variable Sin embargo, un AppleScript property variable consigue reiniciar si el script es recompilado en Script Editor y o salvado de nuevo después de haber sido originalmente guardado .

Esto no es necesariamente un problema, si una vez que el script se ha configurado adecuadamente para satisfacer las necesidades y funciona correctamente durante las pruebas, entonces se guarda como un aplicación y no modificado o salvado de nuevo después de que la tirada inicial de la misma haya sido guardado como aplicación . Si eso puede ser un problema, entonces el lista tendrá que ser guardado como archivo de disco . (Personalmente, optaría por utilizar el archivo de disco .)

Salvando el lista de nombres de archivos cuyo contenido ya ha sido enviado por correo electrónico como archivo de disco también puede hacerse de varias maneras. Básicamente, hay que elegir una de las formas posibles y codificarla en consecuencia.

Lo siguiente AppleScript código ejemplos, muestra dos formas de realizar la tarea general. La primera, utilizando un AppleScript property variable y el segundo utilizando un archivo de disco para mantener el lista .

  • Nota: En uno de mis comentarios, pregunté "¿Los archivos tienen que ser Rich Text o pueden ser Plain Text?", y la razón es que, como Texto sin formato el archivo no tendría que abrirse en el GUI para recuperar el contenido, mientras que con Texto enriquecido habría que abrirlo en TextEdit para recuperar el contenido. No tener que hacerlo a través del GUI es más rápido y visualmente menos molesto. Además, si esto se hace en Automatizador utilizando el Obtener el contenido del documento de TextEdit acción recupera el contenido como texto sin formato de todos modos. Por lo tanto, es realmente ventajoso utilizar Texto sin formato archivos sobre Texto enriquecido para empezar. Estos ejemplos están codificados para utilizar Texto enriquecido y TextEdit , con una modificación que se muestra después si se utiliza Texto sin formato .

En el primer ejemplo AppleScript código Hay algunos variables que tendrá que establecer:

  • thisFolder - La ubicación de la carpeta que contiene los 100 archivos.
  • theRecipientName - El nombre del destinatario del correo electrónico.
  • theRecipientAddress - La dirección de correo electrónico del destinatario del correo electrónico.
  • theSubject - El asunto del mensaje de correo electrónico.

En el segundo ejemplo AppleScript código Además de la variables que se muestra arriba:

  • theAlreadySentListFilename - La ubicación y el nombre del archivo que contiene los nombres de los archivos de los que ya se ha enviado el contenido.

El resto de la script se codifica de manera ( tokenizado ) para trabajar con estos variables y otros set dentro del script . Además, el tell application "Mail" bloque de código está codificado para enviar el mensaje automáticamente, sin embargo se ha comentado, hasta que se hagan las pruebas y o si no se quiere enviar automáticamente. Descomentar en consecuencia.

Para utilizar este script , en Script Editor crear un nuevo documento y guardarlo como aplicación en /Aplicaciones , nombrándolo, por ejemplo, como 100 mensajes para enviar.app .

A continuación, copie y pegue el ejemplo AppleScript código abajo en el 100 mensajes para enviar.app en script Editor y golpear el Compilar botón en el Barra de herramientas .

Modificar el variables , mencionada anteriormente.

Salvar el aplicación y prueba desde dentro Script Editor .

Una vez que haya terminado con las pruebas, pulse el botón Compilar botón en el Barra de herramientas para restablecer el theAlreadySentList AppleScript property variable a un vacío lista y luego guardar y cerrar el 100 mensajes para enviar.app para no reiniciar el theAlreadySentList AppleScript property variable una vez que comienza el modo de producción.

Primer ejemplo de AppleScript código :

--  ### 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

En este segundo ejemplo AppleScript código , a archivo de disco se utiliza para almacenar el lista de nombres de archivos cuyo contenido ya ha sido enviado como mensaje de correo electrónico.

Para utilizar este script , en script Editor crear un nuevo documento y guardarlo como aplicación en /Aplicaciones , nombrándolo, por ejemplo, como 100 mensajes para enviar.app . Esto se hace para poder añadir un texto sin formato al archivo paquete de aplicaciones a utilizar para el lista de nombres de archivos ya enviados. (Prefiero mantener los archivos de apoyo relacionados dentro del paquete de aplicaciones .)

Una vez guardado el documento como aplicación Ahora abra el paquete de aplicaciones (en Buscador , Haga clic con el botón derecho del ratón en Mostrar el contenido del paquete ) a Contenidos/Recursos/ y crear el, por ejemplo Mensajes enviados Lista de archivos.txt como un archivo vacío, y luego cerrar el paquete de aplicaciones .

A continuación, copie y pegue el ejemplo AppleScript código a continuación en el e.g. 100 mensajes para enviar.app en Script Editor y golpear el Compilar botón en el Barra de herramientas .

Modificar el variables como se ha mencionado anteriormente.

Salvar el aplicación y prueba desde dentro script Editor .

Una vez que haya terminado con las pruebas, borre las entradas del Mensajes enviados Lista de archivos.txt , por lo que es un archivo vacío cuando se ejecuta el aplicación por primera vez en modo de producción.


Segundo ejemplo de AppleScript código :

--  ### 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

NOTA: Si va a utilizar Texto sin formato en lugar de los archivos Texto enriquecido archivos, entonces todo el tell application "TextEdit" bloque de código puede sustituirse por las siguientes dos líneas de código :

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

También puedes cambiar el comentario de arriba, -- # Get the content of the Rich Text file. , intercambiando Rich con Llano .

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X