目标:
我正在尝试编写一个脚本,可以将其绑定到文件夹操作中,以将文件从下载文件夹移至正确的位置。该文件夹将显示音乐,电影和电视节目或体育节目。将有单个文件以及包含多个项目的文件夹。我已经完成了脚本的框架,但是我在做一些我知道如何用其他语言进行操作的事情。
参数:
电视:单个文件为S %% E %%,文件夹为S %%
电影:具有单个视频文件(mkv,mp4,m4v)且名称中没有S %% E %%的文件夹,或没有S %%的文件夹
音频:单个文件的文件类型(mp3,aac,flac,wav),文件夹很难看到内容
问题:
如何更改文件选择以包括要测试的文件夹和文件?我认为从Automator中的文件夹操作中输入脚本输入时,这种方法会很好用,但还不确定。
Applescript中似乎没有通配符可用于我的比较。
我的主要问题是不知道如何打开文件夹项目以及如何在目录中循环查找某些扩展名或名称。
GitHub:https://github.com/wiebs2334/DownloadManager
任何建议都将不胜感激!
答案 0 :(得分:1)
Vanilla AppleScript无法处理通配符以进行文本搜索,但是有免费的脚本添加Satimage.osax
,其中添加了强大的功能,例如使用正则表达式查找文本
您可以在Smile Companion OSAX网站上找到OSAX。下载Satimage osax 3.7.0 (build 411)
并将文件放入/Library/ScriptingAdditions
(顶级Library
!)
这是使用Scripting Addition优化的脚本,基本的正则表达式是
"\\.S\\d{2}E"
:查找一个点,后跟大写字母S
,后跟两位数字和首字母E
"(nhl|nfl|ncaa)"
:文本包含“ nhl”或“ nfl”或“ ncaa” 如果文本与模式不匹配,则会引发错误。
主要变化是
run
处理程序显示一个对话框,用于选择文件或文件夹open
处理程序,以将脚本用作小滴if/end if - if/end if
表达式已替换为if/else if/end if
如果您打算将该脚本用作文件夹操作,则无论如何都将文件和文件夹视为
property audioKeywords : {"mp3", "aac", "flac", "wav"}
property videoExtensions : {"mkv", "m4v", "mov", "mp4"}
on run
set {button returned:buttonReturned} to display dialog "Choose files or folders" buttons {"Cancel", "Choose Files", "Choose Folders"}
if buttonReturned is "Choose Files" then
classifyItems for (choose file with multiple selections allowed)
else
classifyItems for (choose folder with multiple selections allowed)
end if
end run
on open theItems
classifyItems for theItems
end open
to classifyItems for myFiles
repeat with anItem in myFiles
set anItem to anItem as text
set isVideo to false
set isTV to false
set isMovie to false
set isAudio to false
set isSports to false
tell application "System Events" to set {theClass, theName, theExt, theContainer} to {class, name, name extension, container} of disk item anItem --set variables
set className to theClass as text
(* &&&&&&&&&&&&&&&&&&&&&&&&&&&& Files &&&&&&&&&&&&&&&&&&&&&&&&&&&& *)
if className is "file" then
########### Video ############
if theExt is in videoExtensions then --search through all video extensions
set isVideo to true
########### TV ############
try
find text "\\.S\\d{2}E" in theName with regexp
set isTV to true
on error
########### Sports ############
try
find text "(nhl|nfl|ncaa)" in theName with regexp
set isSports to true
on error
########### Movies ############
set isMovie to true
end try
end try
########### Audio ############
else if theExt is in audioKeywords then
set isAudio to true
end if
(* &&&&&&&&&&&&&&&&&&&&&&&&&&&& Folders &&&&&&&&&&&&&&&&&&&&&&&&&&&& *)
else if className is "folder" then
########### TV ############
try
find text "\\.S\\d{2}\\." in theName with regexp
set isTV to true
on error
try
########### Audio ############
find text "(mp3|aac|flac|wav)" in theName with regexp
set isAudio to true
on error
########### Movie ############
set isMovie to true
end try
end try
end if
display dialog ("Type:" & theClass & " || Ext:" & theExt & " || Video:" & isVideo & "
" & theName & "
Movie:" & isMovie & " || TV:" & isTV & " || Sports:" & isSports & "
Audio:" & isAudio)
end repeat
end classifyItems