Automator:从文件夹中的许多文件中只选择一个文件。脚本需要吗?


0

我在一个文件夹中有一个包含不同100 rtf文本文件的文件夹。

我想让Automator获取一个文本文件的内容,并通过邮件每天发送一次到相同的邮件地址 - 而不是两次发送相同的文本。

因为我是新手,并且没有找到使用Automator的预定义操作过滤掉一个rtf文件的方法,我想我必须创建一个脚本。

到目前为止我得到了什么:

新申请:

  1. Find Finder-Item:我选择了包含文件的文件夹。条件:文件扩展名是rtf - >现在我得到了所有(3 test-)rtf的结果。

(*)

  1. 打开Finder-Item:使用默认应用程序打开
  2. 获取TextEdit文档的内容
  3. 新邮件

此工作流程的作用:它打开TextEdit中的所有rtf文件。然后打开一个新的邮件窗口并显示上次打开的文本文件的内容。因为它不发送它。

我想我必须包含一个步骤/脚本(*),因此Automator有一个特定的rtf文件传递给后续步骤。你能帮我找到这个步骤或者告诉我如何创建一个脚本吗?或许你知道另一种解决方案?

在此输入图像描述


你说,“ 当在Automator中添加'搜索查找器 - 对象' - 动作时 ”,并且在默认安装的macOS中没有“'搜索查找器 - 对象 - 动作”。也就是说,如果您希望这是一个完全自动化的过程并确保相同的文件内容不会被发送两次,那么您将不得不采用某种形式的脚本。我建议你编辑你的问题并澄清你真正想要的是什么,并且这样做是为了没有含糊之处。
3439894

好吧,我用的是德文版。所以我认为它的英文名称相同。我在问题中添加了一张图片来展示我的想法。
Stam

1
由于您在主要使用英语的地方发帖,并且您使用的语言不是英语,因此在提问时可能应该说明。顺便说一句,在美国英文版“Finder-Objekte suchen”是“Find Finder Items”。也就是说,你添加的内容并没有改变我在第一篇评论中所说的其余内容。记住这一点,没有看到整个工作流程,所有动作和设置,至少设置的英文过渡,而不是动作名称,以及解决我在第一条评论中提出的其他观点,我无法帮助对不起!
3439894 2017年

所有文件都在一个单独的文件夹中吗?文件必须是富文本还是纯文本?
3439894

Answers:


1

当想要从一组文件中随机选择时,要将其内容作为电子邮件发送,同时确保每个文件的内容仅使用一次,则需要维护已经从其发送内容的文件名列表。可以创建,访问和维护此列表的方式有很多种。

从避而远之的Automator,并使用AppleScript的整个过程中,最简单的是作为一个AppleScript的 property 变量,但是一个AppleScript的 property 变量重置,如果脚本重新编译脚本编辑器和或再次保存它最初被后保存

这不一定是一个问题,如果一旦脚本已经正确配置,以满足需求和测试过程中运行正常,则然后保存为一个应用程序,而不是修改再保存它的初始运行后,已保存申请。如果这可能是一个问题,那么列表将需要保存磁盘文件(就个人而言,我选择使用磁盘文件。)

保存已经通过电子邮件将内容作为磁盘文件的文件名列表也可以通过多种方式完成。您基本上需要选择一种可能的方法并相应地对其进行编码。

以下AppleScript 代码示例显示了完成整个任务的两种方法。第一个是使用AppleScript property 变量,第二个是使用磁盘文件来维护列表

  • 注:在我的意见之一,我问过了,这样做的原因是,因为“做文件必须是格式文本,也可以是纯文本?” 纯文本文件不需要在被打开GUI来检索内容,与Rich Text一样,需要在.eg TextEdit中打开以检索内容。不必通过GUI进行操作更快,视觉上不那么突兀。此外,如果使用“ 获取TextEdit文档的内容”操作在Automator中完成此操作,则无论如何都会以纯文本形式检索内容。因此,使用纯文本文件实际上是有利的 开始使用富文本。这些示例编码为使用Rich TextTextEdit,如果使用纯文本,则会在之后显示修改。

在第一个AppleScript 代码示例中,您需要设置一些变量

  • thisFolder - 包含100个文件的文件夹的位置。
  • theRecipientName - 电子邮件收件人的姓名。
  • theRecipientAddress - 电子邮件收件人的电子邮件地址。
  • theSubject - 电子邮件的主题。

在第二个示例AppleScript 代码中,除了上面显示的变量之外:

  • theAlreadySentListFilename - 包含已从中发送内容的文件名的文件的位置和名称。

脚本的其余部分以一种方式(标记化)进行编码,以处理这些变量以及脚本中设置的其他变量。此外,代码进行编码,自动发送信息,但它已被注释掉,直到测试完成,或者如果不想自动发送。取消注释。tell application "Mail"

要使用这个脚本,在脚本编辑器,创建一个新文档,并将其保存为一个应用程序/应用程序,命名它,如100个信息给Send.app

接下来,将下面的示例AppleScript 代码复制并粘贴脚本编辑器中100条Send to Send.app中,然后单击工具栏上的“ 编译” 按钮

修改上面提到的变量

脚本编辑器中保存应用程序并进行测试。

完成测试后,点击工具栏上的编译 按钮AppleScript 变量重置为空列表,然后保存并关闭100个消息到Send.app,以便在生产模式开始后不重置AppleScript 变量theAlreadySentList property theAlreadySentList property

第一个示例AppleScript 代码

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

在第二个AppleScript 代码示例中,磁盘文件用于存储已从中发送内容作为电子邮件消息的文件名列表

要使用这个脚本,在脚本编辑器,创建一个新文档,并将其保存为一个应用程序/应用程序,命名它,如100个信息给Send.app。这样做是为了您可以将纯文本文件添加到应用程序包中,以用于已发送的文件名列表。(我更喜欢在应用程序包中保留相关的支持文件。)

将文档保存为应用程序后,现在打开应用程序包(在Finder中右键单击“ 显示包内容”)到“ 内容/资源 ”,然后创建例如“已发送消息文件名List.txt”文件作为空文件,然后关闭应用程序包

接下来,将下面的示例AppleScript 代码复制并粘贴脚本编辑器中的100个Messages to Send.app中,然后单击工具栏上的“ 编译” 按钮

修改变量,如上所述。

脚本编辑器中保存应用程序并进行测试。

完成测试后,清除已发送消息文件名List.txt中的条目,因此在生产模式下首次运行应用程序时,它是一个空文件。


第二个例子AppleScript 代码

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

注意:如果你要使用纯文本文件,而不是富文本文件,然后整个tell application "TextEdit" 代码可以与以下两行被替换代码

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

您还可以更改其上方的注释-- # Get the content of the Rich Text file.,将RichPlain交换。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.