Applescript:从文件名获取周数

Applescript:从文件名获取周数,applescript,Applescript,我的智能手机上有很多照片。所有这些文件的文件名格式均为yyyy-mm-dd hh:mm:ss.jpg 我需要根据周数将它们分类到文件夹中 使用AppleScript:)将文件移动到文件夹中没有问题。我还可以为给定日期定义周数。我对语法甚至数据类型都有问题(正如我所想),但我无法理解问题所在 这是我用的 我有一个函数,用于定义给定日期的周数 我浏览了一下我的文件夹,把所有的名字都写进了名单 我解析名称以获取yyyy、mm和dd作为变量 然后我试着用这些变量调用我的函数——问题就从这里开始了 请看我

我的智能手机上有很多照片。所有这些文件的文件名格式均为yyyy-mm-dd hh:mm:ss.jpg

我需要根据周数将它们分类到文件夹中

使用AppleScript:)将文件移动到文件夹中没有问题。我还可以为给定日期定义周数。我对语法甚至数据类型都有问题(正如我所想),但我无法理解问题所在

这是我用的

  • 我有一个函数,用于定义给定日期的周数
  • 我浏览了一下我的文件夹,把所有的名字都写进了名单
  • 我解析名称以获取yyyy、mm和dd作为变量
  • 然后我试着用这些变量调用我的函数——问题就从这里开始了
  • 请看我的代码示例:

    property DBFolder : "Macintosh HD:Users:lyubovberezina:Dropbox:DB"
    property CUFolder : "Macintosh HD:Users:lyubovberezina:Dropbox:Camera Uploads"
    
    on weekNumber(_inputDate)
    
    script Week_Number_Extras
    
        on dateOfFirstWeekOfYear(_year)
            -- Get Monday of first week number
            set _date to current date
            set year of _date to _year
            set month of _date to 1
            set day of _date to 1
            set time of _date to 0
    
            -- Get the first Thursday of this year
            repeat until weekday of _date is Thursday
                set _date to _date + (24 * 60 * 60)
            end repeat
    
            -- Return the Monday before
            set _date to _date - (3 * 24 * 60 * 60)
    
            return _date
        end dateOfFirstWeekOfYear
    
    end script
    
    -- Make a copy of the passed date object to avoid changes to the original
    copy _inputDate to _targetDate
    
    -- Reset the time and go back to Monday
    set time of _targetDate to 0
    repeat until weekday of _targetDate is Monday
        set _targetDate to _targetDate - (24 * 60 * 60)
    end repeat
    
    -- Get the date of the first week for the current year and the next one
    tell Week_Number_Extras
        set _matchDate to dateOfFirstWeekOfYear(year of _targetDate)
        set _nextYearsFirstWeekDate to dateOfFirstWeekOfYear((year of _targetDate) + 1)
    end tell
    
    -- Exit early, if the current week is the first one of next year
    if _targetDate = _nextYearsFirstWeekDate then return 1
    
    -- Count up until the target date is reached
    set _weekNumber to 1
    repeat until _targetDate = _matchDate
        set _matchDate to _matchDate + (7 * 24 * 60 * 60)
        set _weekNumber to _weekNumber + 1
    end repeat
    
    return _weekNumber
    end weekNumber
    
    tell application "Finder"
    set this_folder to folder CUFolder
    set this_list to every file of this_folder
    repeat with i in this_list
        set fileName to name of i
        set fileYear to characters 1 thru 4 of fileName as string
        set fileMonth to characters 6 thru 7 of fileName as string
        set fileDay to characters 9 thru 10 of fileName as string
    end repeat
    end tell
    
    set theNewDate to date (fileMonth & "/" & fileDay & "/" & fileYear)
    weekNumber(theNewDate)
    
    在这种情况下,该行

    set theNewDate1 to date (fileMonth & "/" & fileDay & "/" & fileYear)
    
    工作正常(我的意思是,没有错误),但由于它在循环之外,它只给出循环中最后一个图像的结果。 但如果我将其移动到循环中,则会出现错误:

    property DBFolder : "Macintosh HD:Users:lyubovberezina:Dropbox:DB"
    property CUFolder : "Macintosh HD:Users:lyubovberezina:Dropbox:Camera Uploads"
    
    on weekNumber(_inputDate)
    
    script Week_Number_Extras
    
        on dateOfFirstWeekOfYear(_year)
            -- Get Monday of first week number
            set _date to current date
            set year of _date to _year
            set month of _date to 1
            set day of _date to 1
            set time of _date to 0
    
            -- Get the first Thursday of this year
            repeat until weekday of _date is Thursday
                set _date to _date + (24 * 60 * 60)
            end repeat
    
            -- Return the Monday before
            set _date to _date - (3 * 24 * 60 * 60)
    
            return _date
        end dateOfFirstWeekOfYear
    
    end script
    
    -- Make a copy of the passed date object to avoid changes to the original
    copy _inputDate to _targetDate
    
    -- Reset the time and go back to Monday
    set time of _targetDate to 0
    repeat until weekday of _targetDate is Monday
        set _targetDate to _targetDate - (24 * 60 * 60)
    end repeat
    
    -- Get the date of the first week for the current year and the next one
    tell Week_Number_Extras
        set _matchDate to dateOfFirstWeekOfYear(year of _targetDate)
        set _nextYearsFirstWeekDate to dateOfFirstWeekOfYear((year of _targetDate) + 1)
    end tell
    
    -- Exit early, if the current week is the first one of next year
    if _targetDate = _nextYearsFirstWeekDate then return 1
    
    -- Count up until the target date is reached
    set _weekNumber to 1
    repeat until _targetDate = _matchDate
        set _matchDate to _matchDate + (7 * 24 * 60 * 60)
        set _weekNumber to _weekNumber + 1
    end repeat
    
    return _weekNumber
    end weekNumber
    
    tell application "Finder"
    set this_folder to folder CUFolder
    set this_list to every file of this_folder
    repeat with i in this_list
        set fileName to name of i
        set fileYear to characters 1 thru 4 of fileName as string
        set fileMonth to characters 6 thru 7 of fileName as string
        set fileDay to characters 9 thru 10 of fileName as string
        set theNewDate to date (fileMonth & "/" & fileDay & "/" & fileYear)
        weekNumber(theNewDate)
    end repeat
    end tell
    
    在获取第一个文件后,会出现以下错误:

    get name of document file "2013-01-02 02.43.21.jpg" of folder "Camera Uploads" of folder "Dropbox" of folder "lyubovberezina" of folder "Users" of startup disk
        --> "2013-01-02 02.43.21.jpg"
    get date "01/02/2013"
        --> error number -1728 from date "01/02/2013"
    Result:
    error "Finder got an error: Can’t get date \"01/02/2013\"." number -1728 from date "Wednesday, January 2, 2013 12:00:00 AM"
    
    我几乎是Applescript的新手,所以我无法理解为什么代码在循环外工作而不是在循环内工作。我将非常感谢您对这件事的帮助


    非常感谢

    您应该坚持您的原始格式:

    set theNewDate to current date
    set theNewDate's year to fileYear
    set theNewDate's month to fileMonth
    set theNewDate's day to fileDay
    
    此外:

    将日期设置为日期+(24*60*60)

    将_日期设置为_日期+天

    将日期设置为日期-(3*24*60*60)
    与 将_日期设置为_日期-(3*天)

    将匹配日期设置为匹配日期+(7*24*60*60)


    将_matchDate设置为_matchDate+weeks

    至少在周数部分使用shell脚本可能更容易:

    do shell脚本“日期-jf%F 2013-07-19+%V”

    cd~/Dropbox/Camera\上传;对于f in*;do d=../DB/$(日期-jf%F${F:0:10}+%Y-%V“$F”);mkdir-p$d;mv“$f”$d;完成