【问题标题】:How to rename files as they are added to a folder?如何在文件添加到文件夹时重命名文件?
【发布时间】:2020-08-08 14:11:52
【问题描述】:

我创建了一个 Automator 工作流程,在将 iOS 模拟器屏幕截图添加到桌面文件夹时重命名它们。但是要使工作流程正常工作,我需要自己手动运行它。有没有办法让工作流像后台服务一样连续监视桌面文件夹并重命名屏幕截图?

这是我创建的工作流程:

Screenshot of the Workflow

【问题讨论】:

  • 文件夹操作是您想要的,您可能需要使用 文件夹操作设置 服务来启用它们。文件夹操作会将放置的项目传递给它,因此您不需要额外的 Find Finder Items,但请注意,重命名监视文件夹中的项目将再次触发文件夹操作。在重命名之前,您需要将这些项目移动到另一个文件夹。
  • @red_menace,查看 OP 的链接屏幕截图,他已经在使用 文件夹操作。没错,他不需要使用 Find Finder Itemsaction,但他也不需要在重命名文件之前移动文件。我只是不认为 workflow 运行两次有什么大不了的,第二次运行它不会做任何事情,也不会伤害任何事情,因为它会在任何 文件/文件夹放置在桌面上,而不仅仅是模拟器屏幕截图 - ...
  • Edward Mordrake,您的 OP 中的链接屏幕截图显示你们都已经在使用 文件夹操作,这是一个后台服务。如果它没有自动触发,请调出文件夹操作设置。例如通过 Spotlight 键入它并切换 [√]启用文件夹操作复选框,因为这可能有助于让它工作。我知道这些年来我必须这样做几次。另外,请阅读我对 red_menace 的评论。
  • @user3439894 - 我看到 OP 已经在使用文件夹操作,这似乎是他正在寻找的。根据正在执行的操作(示例工作流不完整或在运行时填写),重新触发文件夹操作可能会出现问题,因此通常最好避免这种情况。
  • @red_menace,一般来说,如果文件夹操作不会导致无限循环,则无需担心单个重新触发,因为这样做不会产生任何后果!对于 OP 的工作流程,如果目标存在,它只会导致一次重新触发,并且这样做不会产生任何后果!当文件在没有目标名称的情况下在桌面上创建/删除时,它总是会触发并且什么也不做,这与它本质上没有什么不同。在这个特定的用例中绝对没有什么可担心的,并且在重命名之前不需要移动目标文件!

标签: macos applescript automator


【解决方案1】:

我发现 automator 有时有点笨拙,所以我建议您使用标准的 AppleScript 文件夹操作来执行此操作。将以下脚本复制到 Script Editor.app 中,根据需要修改前缀,然后将其保存在 ~/Library/Scripts/Folder Action Scripts 中。

property old_prefix : "Simulator Screen Shot - "
property new_prefix : "some text "

on adding folder items to this_folder after receiving these_items
    repeat with this_item in these_items
        set item_path to POSIX path of this_item
        tell application "System Events"
            set this_disk_item to disk item item_path
            tell this_disk_item
                if its name begins with old_prefix then
                    set its_extention to its name extension
                    set its_name to its displayed name
                    set new_file_name to new_prefix & (text ((length of old_prefix) + 1) through -1 of its_name)
                    if new_file_name ≠ its displayed name and new_file_name ≠ "" then
                        set name of this_disk_item to new_file_name & "." & its_extention
                    end if
                end if
            end tell
        end tell
    end repeat
end adding folder items to

使用 Spotlight 打开应用程序“文件夹操作设置”,将您的桌面添加为左侧的文件夹,然后在右侧选择您刚刚保存的脚本并将其附加到该文件夹​​。它应该“正常工作”。

【讨论】:

  • 我一开始就设置为文件夹动作。
  • @EdwardMordrake:抱歉,我错过了。我会删除我的答案。
  • @EdwardMordrake:已修改。
【解决方案2】:

我这样做的方法是使用名为launchd 的应用程序以您需要的频率(例如每隔几秒)打开自动机脚本。 This 网站描述了如何设置它。基本上,您必须首先将您的自动化脚本作为应用程序保存到某个文件夹(例如 Documents)中,然后编写一个简短的 xml 脚本,告诉 launchd 要打开哪个文件以及打开的频率。

下面是一个示例脚本:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>com.NAME.test</string>
        <key>Program</key> 
        <string>/Users/USERNAME/Documents/test.app/Contents/MacOS/Application Stub</string>
        <key>StartInterval</key>
        <integer>5</integer>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

打开一个新的“纯文本”TextEdit 文档并粘贴到上面。用你想要的任何东西替换标签(com.NAME.test);我通常只是把我的名字放在那里,然后是脚本的名称。接下来将Program 下的行更改为您之前保存的“.app”文件的位置,记住将USERNAME 更改为您的用户名。请记住,/Contents/MacOS/Application Stub 必须紧跟在“.app”部分之后,这样脚本才能启动您的应用程序。然后将StartInterval 下的行更改为您希望脚本在再次运行之前等待的秒数。

完成脚本编辑后,将其保存到“/Users/USERNAME/Library/LaunchAgents/com.NAME.test.plist”,当然将USERNAME 更改为您的用户名,将com.NAME.test 更改为标签在 xml 脚本中使用。如果它询问您是否要使用“.plist”扩展名保存它,请选择是。文件保存后,打开终端(/Applications/Utilities/Terminal.app)并输入命令launchctl load /Users/USERNAME/Library/LaunchAgents/com.NAME.test.plist,将文件名更改为“.plist”文件的文件路径。使用unload 而不是load 来阻止脚本运行。

对我来说,每次脚本运行时菜单栏中都会出现一个齿轮图标,所以我在 thisthis 网站上发现,您可以通过在最顶部添加“运行 Shell 脚本”来停止它Automator 脚本,然后在框中输入killall ScriptMonitor || true

【讨论】:

    猜你喜欢
    • 2015-02-06
    • 1970-01-01
    • 2017-07-16
    • 2015-03-16
    • 1970-01-01
    • 2022-10-15
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多