首页 > 解决方案 > 如何使用 Automator 重命名和移动下载到“下载”的文件,无论是否使用 Applescript、Shell 脚本或 Javascript?

问题描述

我是编程新手,因此请原谅我缺乏知识。我已经搜索了网站和互联网,但没有找到看似简单问题的答案。

我想自动化一些个人和商业文件的归档和重命名——它们是银行对账单,所以数字是匿名的。我对理解代码很感兴趣,因此我也可以在之后对其进行调整,以进行进一步的操作(也许供其他人使用)。

文档将下载到 (mac) 下载文件夹中。通常他们有这个名字:“Statement--12345678--98765432--1-06-2020-30-06-2020.pdf”开头的两组数字不是这些通用数字而是8个数字(虽然第一个数字有时没有列出,因为它是“0”)。第二组两个数字是指两个日期,采用日-月-年格式。有时第一个日期从上个月的最后一天开始!

作为一个新手,我从 Automator 开始 - 使用文件夹操作将单个文件移动到命名文件夹(按年份)。然后我想重命名它们,以便第二个日期在 YYYYMMDD 格式的名称中排在第一位,这样它们就会自动按日期顺序列在年份文件夹中。全名将变为“YYYYMMDD 98765432 Month YY”。

我可以自动移动文件(感谢automator);我什至可以以正确的格式在名称的开头添加当前日期(但它将是当前日期而不是文件中的日期)。但我不能做我真正想做的事:根据文件名中的日期更改名称。

然后我查看了 AppleScript。下面的答案解决了命名问题 - 谢谢!

但是当我尝试拿起一堆文件时 - 其中有 25 个(很高兴被 Automator 找到并移动(查找文件和移动文件),输出未被识别为 AppleScript 的输入。我得到“无法获取文件XXXX 作为别名”,或者如果我尝试创建一个未定义的变量(尽管我已经尝试了很多次......作为 {},作为“”,作为输入的第 1 项)。

如果不清楚,我深表歉意,但我正在尽力解释它,并且不理解诸如“终端 ls”之类的术语。

感谢您收到任何帮助、建议和评论。我真的很想尝试理解代码,这样我就可以应用学习了!谢谢你,约翰

标签: shellfileapplescriptnamingautomator

解决方案


好的,您的问题是提取名称的多个部分。诀窍是把它炸成小块。GREP 是一个很好的工具,但是对于“开箱即用”的 applescript 来说很棘手。

我使用一个名为“textSplit”的子程序来完成这项工作。一旦文件名的每个部分都在变量中可用,您应该能够构建任何文件或文件夹名称......

这是我解决这个问题的方法:

set thisFileName to "Document--12345678--98765432--1-06-2020-30-06-2020.pdf"
-- first we split the name using the "--" separator
set mainParts to textSplit(thisFileName, "--")
-- we now copy the result to variables to handle it
copy mainParts to {prefixOne, numberOne, numberTwo, theTwoDates}
--> prefixOne = "Document"
--> numberOne = "12345678"
--> numberTwo = "98765432"
--> theTwoDates = "1-06-2020-30-06-2020.pdf"
-- get rid of the extension
set theDatesWithoutExtension to first item of textSplit(theTwoDates, ".")
-- split the dates 
set splitDates to textSplit(theDatesWithoutExtension, "-")
-- copy result into nice variables
copy splitDates to {dayOne, monthOne, yearOne, dayTwo, monthTwo, yearTwo}
-- and then build the filename with whatever you want
set myNewFileName to yearOne & monthOne & dayOne & space & numberTwo & space & monthTwo & "-" & yearTwo & ".pdf"
--> "2020061 98765432 06-2020.pdf"

-- make folders, move files, rename…
-- ================================================================================================
on textSplit(theText, theDelimiter)
    -- this will split a string and returns a list of substrings
    set saveDelim to AppleScript's text item delimiters
    set AppleScript's text item delimiters to {theDelimiter}
    set theList to every text item of theText
    set AppleScript's text item delimiters to saveDelim
    return (theList)
end textSplit

推荐阅读