使用 automator 和 AppleScript 根据文件的名称和内容将文件移动到不同的文件夹和子文件夹
Using automator and AppleScript to move a file to a different folder and subfolder based on name and content of a file
我是 Automator 和脚本方面的新手...
看了很多和我类似问题的答案,但是用Automator + AppleScript适配不成功
这是我想要做的:
当我将文件下载到目录 /Volumes/Macboot /Downloads
时(是的,硬盘名称中有一个 space),例如statement_EUR_2020-05-01_2020-05-31.pdf
.
我验证文件是否具有扩展名 pdf + 它包含一个 IBAN + 名称包含 "statement".
如果文件对应,我要验证名称中的年月,并将其相应地移动到好的Google驱动器文件夹:
/Volumes/Macboot /Travail en cours/Google Drive/Company/Comptabilité/**2020**/**05**/Compte Transferwise 1/
现在,我成功获取了2个变量中的年和月,但是我在Automator的下一步中找不到使用变量移动文件的好方法。
以下应该可行,或者至少让您走上正确的道路。为变量设置以下内容:
- monthName:一个
text
变量,保存月份值,如上
- yearName:
text
变量,保存年份值,如上
- filePath:一个
storage
变量,保存对您正在处理的文件的引用
- outputFolder:一个
storage
变量,它将保存对输出文件夹的引用
前两个动作从存储中收集月份和年份,并将其作为输入变量中的列表传递给 AppleScript 动作。该 AppleScript 操作从列表中提取值,将它们连接成路径字符串,然后使用 POSIX File
命令将其转换为文件引用。第四个操作将文件引用存储在 outputFolder 变量中。
请注意,第五个操作忽略了第四个操作的输入。相反,它会恢复原始文件说明符(您将在工作流的较早位置存储该文件说明符,然后将文件说明符发送到 Move Finder Items 操作,该操作使用存储在 outputFolder 变量中的值作为其目标。
我已经简化了流程并找到了使用 AppleScript 的方法:
on run {input, parameters}
set theFile to input as text
set yearName to ((characters 34 thru -1 of theFile) as string) --trim first 35
set yearName to ((characters 1 thru -22 of yearName) as string) --trim last 23
set monthName to ((characters 39 thru -1 of theFile) as string)
set monthName to ((characters 1 thru -19 of monthName) as string)
set destinationFolder to ("Macboot :Travail en cours:Google Drive:Company:Comptabilité:" & yearName & ":" & monthName & ":Compte Transferwise 1:Relevé PDF + fichier CSV:" as text)
tell application "Finder"
activate
move theFile to destinationFolder -- use "copy source_file to folder (target_folder as alias)" to copy the files
end tell
set result to {yearName, monthName, theFile, destinationFolder}
return result
end run
我是 Automator 和脚本方面的新手... 看了很多和我类似问题的答案,但是用Automator + AppleScript适配不成功
这是我想要做的:
当我将文件下载到目录
/Volumes/Macboot /Downloads
时(是的,硬盘名称中有一个 space),例如statement_EUR_2020-05-01_2020-05-31.pdf
.我验证文件是否具有扩展名 pdf + 它包含一个 IBAN + 名称包含 "statement".
如果文件对应,我要验证名称中的年月,并将其相应地移动到好的Google驱动器文件夹:
/Volumes/Macboot /Travail en cours/Google Drive/Company/Comptabilité/**2020**/**05**/Compte Transferwise 1/
现在,我成功获取了2个变量中的年和月,但是我在Automator的下一步中找不到使用变量移动文件的好方法。
以下应该可行,或者至少让您走上正确的道路。为变量设置以下内容:
- monthName:一个
text
变量,保存月份值,如上 - yearName:
text
变量,保存年份值,如上 - filePath:一个
storage
变量,保存对您正在处理的文件的引用 - outputFolder:一个
storage
变量,它将保存对输出文件夹的引用
前两个动作从存储中收集月份和年份,并将其作为输入变量中的列表传递给 AppleScript 动作。该 AppleScript 操作从列表中提取值,将它们连接成路径字符串,然后使用 POSIX File
命令将其转换为文件引用。第四个操作将文件引用存储在 outputFolder 变量中。
请注意,第五个操作忽略了第四个操作的输入。相反,它会恢复原始文件说明符(您将在工作流的较早位置存储该文件说明符,然后将文件说明符发送到 Move Finder Items 操作,该操作使用存储在 outputFolder 变量中的值作为其目标。
我已经简化了流程并找到了使用 AppleScript 的方法:
on run {input, parameters}
set theFile to input as text
set yearName to ((characters 34 thru -1 of theFile) as string) --trim first 35
set yearName to ((characters 1 thru -22 of yearName) as string) --trim last 23
set monthName to ((characters 39 thru -1 of theFile) as string)
set monthName to ((characters 1 thru -19 of monthName) as string)
set destinationFolder to ("Macboot :Travail en cours:Google Drive:Company:Comptabilité:" & yearName & ":" & monthName & ":Compte Transferwise 1:Relevé PDF + fichier CSV:" as text)
tell application "Finder"
activate
move theFile to destinationFolder -- use "copy source_file to folder (target_folder as alias)" to copy the files
end tell
set result to {yearName, monthName, theFile, destinationFolder}
return result
end run