AppleScript的错误,而试图用榛移动文件 [英] Applescript error while trying to move files with hazel

查看:144
本文介绍了AppleScript的错误,而试图用榛移动文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以,我有一个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文件对象

  • Restoring文本项分隔符是没有必要的据我所知

    • 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的错误,而试图用榛移动文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆