问题描述
所以,我有一个AppleScript(波纹管)至极用于清洁集电视节目的名称,并移动情节的基础上,其右侧的文件夹。我用榛用正确的文件,以激活脚本。在AppleScript的编辑器,脚本似乎罚款,但黑兹尔给了我第12行下面一个错误的脚本:
So,I have an applescript (bellow) wich is used to clean the name of a tv show episode, and move the episode to its right folder based on that. I use hazel to activate the script with the right file. In applescript editor, the script seems fine, but Hazel gives me an error on line 12. Here's the script:
set theSample to theFile
set a to RemoveListFromString(theSample, {"720p", "HDTV", "x264", "IMMERSE", "-", "E01"})
set b to RemoveListFromString(a, {"..."})
set c to RemoveListFromString(b, {".."})
set d to replaceString(c, "S0", "Season ")
set e to replaceString(d, ".", " ")
if e contains "Season" then
move theFile to "/Volumes/LaCie/Midia/Series/" & e
end if
if e does not contain "Season" then
move theFile to "/Volumes/LaCie/Midia/Filmes"
end if
on RemoveFromString(theText, CharOrString)
-- ljr (http://applescript.bratis-lover.net/library/string/)
local ASTID, theText, CharOrString, lst
set ASTID to AppleScript's text item delimiters
try
considering case
if theText does not contain CharOrString then ¬
return theText
set AppleScript's text item delimiters to CharOrString
set lst to theText's text items
end considering
set AppleScript's text item delimiters to ASTID
return lst as text
on error eMsg number eNum
set AppleScript's text item delimiters to ASTID
error "Can't RemoveFromString: " & eMsg number eNum
end try
end RemoveFromString
on RemoveListFromString(theText, listOfCharsOrStrings)
-- ljr (http://applescript.bratis-lover.net/library/string/)
local ASTID, theText, CharOrString, lst
try
script k
property l : listOfCharsOrStrings
end script
set len to count k's l
repeat with i from 1 to len
set cur_ to k's l's item i
set theText to my RemoveFromString(theText, cur_)
end repeat
return theText
on error eMsg number eNum
error "Can't RemoveListFromString: " & eMsg number eNum
end try
end RemoveListFromString
-- e.g. replaceString("Hello hello", "hello", "Bye") --> "Hello Bye"
on replaceString(theText, oldString, newString)
-- ljr (http://applescript.bratis-lover.net/library/string/)
local ASTID, theText, oldString, newString, lst
set ASTID to AppleScript's text item delimiters
try
considering case
set AppleScript's text item delimiters to oldString
set lst to every text item of theText
set AppleScript's text item delimiters to newString
set theText to lst as string
end considering
set AppleScript's text item delimiters to ASTID
return theText
on error eMsg number eNum
set AppleScript's text item delimiters to ASTID
error "Can't replaceString: " & eMsg number eNum
end try
end replaceString
任何想法?
谢谢!
Any ideas?Thanks!
编辑:
所以,现在我得到这样的:
So, now I got this:
on hazelProcessFile(theFile)
set text item delimiters to ":"
set filename to last text item of (theFile as text)
set text item delimiters to "."
if filename contains "." then
set base to text items 1 thru -2 of filename as text
set extension to "." & text item -1 of filename
else
set base to filename
set extension to ""
end if
set text item delimiters to {"720p", "HDTV", "x264", "IMMERSE", "-", "E01", "…", "E02", "EVOLVE"}
set ti to text items of base
set text item delimiters to ""
set newbase to ti as text
set newbase to Replace(newbase, "S0", "Season ")
set newbase to Replace(newbase, ".", " ")
set newbase to Replace(newbase, " ", "")
set newbase to Replace(newbase, " ", "")
set folderLocation to "/Volumes/LaCie/Midia/Series/"
set folderName to newbase as text
tell application "Finder"
if newbase contains "Season" then
if not (exists folder (POSIX file "/Volumes/LaCie/Midia/Series/" & newbase as text)) then
set p to path to "/Volumes/LaCie/Midia/Series/"
--make new folder at p with properties {name:newbase}
make new folder with properties {name:folderName, location:p}
else
move theFile to POSIX file "/Volumes/LaCie/Midia/Series/" & newbase as text
set name of result to newbase
end if
else
move theFile to POSIX file "/Volumes/LaCie/Midia/Filmes/"
end if
end tell
end hazelProcessFile
on Replace(input, x, y)
set text item delimiters to x
set ti to text items of input
set text item delimiters to y
ti as text
end Replace
这不工作是部分至极只有一部分使该文件夹,如果犯规存在,它...任何想法?
The only part that doesnt work is the part wich make the folder if it doesnt exists... Any ideas?
推荐答案
这将是更容易使用的shell脚本,但尝试这样的:
It would be easier to use a shell script, but try something like this:
on hazelProcessFile(theFile)
set text item delimiters to ":"
set filename to last text item of (theFile as text)
set text item delimiters to "."
if filename contains "." then
set base to text items 1 thru -2 of filename as text
set extension to "." & text item -1 of filename
else
set base to filename
set extension to ""
end if
set text item delimiters to {"720p", "HDTV", "x264", "IMMERSE", "-", "E01", "..."}
set ti to text items of base
set text item delimiters to ""
set newbase to ti as text
set newbase to replace(newbase, "S0", "Season ")
set newbase to replace(newbase, ".", " ") & extension
tell application "Finder"
if newbase contains "Season" then
move theFile to POSIX file "/Volumes/LaCie/Midia/Series/"
set name of result to newbase
else
move theFile to POSIX file "/Volumes/LaCie/Midia/Filmes/"
end if
end tell
end hazelProcessFile
on replace(input, x, y)
set text item delimiters to x
set ti to text items of input
set text item delimiters to y
ti as text
end replace
- 嵌入式脚本不能包含处理器
- 外部脚本必须使用hazelProcessFile
- theFile是一个别名,所以你必须将其转换为文本
- 您必须告诉Finder中移动文件,并转换路径文件,
POSIX文件对象
- 据我所知
- Embedded scripts can't contain handlers
- External scripts have to use hazelProcessFile
- theFile is an alias so you have to coerce it to text
- You have to tell Finder to move files and convert paths to file objects with
POSIX file
- Restoring text item delimiters is not necessary as far as I know
编辑:这里是一个shell脚本的版本:
here is a shell script version:
basename=${1##*/}
base=${basename%.*}
[[ $basename = *.* ]] && ext=".${basename##*.}" || ext=
for x in 720p HDTV x264 IMMERSE - E01 ...; do base=${base//"$x"}; done
base=${base//S0/Season}
base=${base//./ }
if [[ $base = *Season* ]]; then
mv "$1" "/Volumes/LaCie/Midia/Series/$base$ext"
else
mv "$1" /Volumes/LaCie/Midia/Movies/
fi
编辑2:这将为 here.comes.honey.boo.boo.s01e04.720p-killers.mkv
例如移动到文件夹名为甜心波波来啦第1季
:
Edit 2: this would for example move here.comes.honey.boo.boo.s01e04.720p-killers.mkv
to a folder named Here Comes Honey Boo Boo Season 1
:
d=${1##*/}
if [[ $d =~ [Ss][0-9][0-9][Ee][0-9][0-9] ]]; then
d=$(sed -E 's/[ .][Ss]([0-9][0-9])[Ee][0-9][0-9].*/ Season \1/;s/ Season 0/ Season /;s/\./ /g' <<< "$d")
d=$(ruby -r rubygems -e 'require "titlecase"; puts ARGV[0].titlecase' "$d")
target="/Volumes/LaCie/Midia/Series/$d"
mkdir -p "$target"
mv "$1" "$target"
else
mv "$1" "/Volumes/LaCie/Midia/Movies"
fi
的首字母大写的宝石可以用安装sudo的创业板安装的首字母大写
。
这篇关于AppleScript的错误,而试图用榛移动文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!