删除文件[working]前面的数字+附加数字以复制文件名[not-working]

时间:2014-06-24 14:24:20

标签: applescript

我有一个AppleScript,可以从文件名的开头删除任何数字和/或连字符和下划线。这很好。 但是,有时我可能会遇到这样的情况:

 Filename Eg;  01-Dog.jpg,  02-Dog.jpg,  03-Dog.jpg, etc.

在这种情况下,脚本会停止/不运行,只告诉我已经存在具有该名称的文件。它没有告诉我哪个文件与之冲突(有时会有很多文件要查看)。

有人可以帮助修改此脚本,以便在这种情况下,具有相同名称的文件将在文件名末尾附加一个数字OR字母(在扩展名之前)。

EG; Dog2.jpg,Dog3.jpg等

on run {input, parameters}
    repeat with thisFile in input
        tell application "Finder"
            set filename to name of (thisFile as alias)
            set filename to (do shell script "echo " & quoted form of filename & " | sed 's/^[0-9_-]*//'")
            set name of thisFile to filename
        end tell
    end repeat
    return input
end run

感谢您的帮助!!

1 个答案:

答案 0 :(得分:0)

基本上,你想在try块中重命名,这样如果它出错,你可以在名称中添加1,2,3 ...然后再次尝试。 这是一个可行的版本:

on run {input, parameters}
    repeat with thisFile in input
        tell application "Finder" to set {theName, theExtension} to {name, name extension} of (thisFile as alias)
        set theName to text 1 thru ((offset of ("." & theExtension) in theName) - 1) of theName
        set theName to (do shell script "echo " & quoted form of theName & " | sed 's/^[0-9_-]*//'")
        set n to ""
        repeat 30 times -- will work for up to 30 versions of the same file name
            try
                tell application "Finder" to set name of thisFile to (theName & n & "." & theExtension)
                exit repeat
            on error errMsg
                if errMsg contains "already an item with that name" then
                    if n is "" then
                    set n to 2
                    else
                    set n to (n as integer) + 1
                    end if
                else
                    display dialog errMsg
                    exit repeat
                end if
            end try
        end repeat
    end repeat
    return input
end run

偏移线用于显示如何获取文件的基本名称。您需要捕获与扩展名分开的基本名称,以便附加1,2,3 ...疯狂,Finder字典具有名称扩展属性,但不是基本名称属性。但是,我只是将扩展名截断到sed调用中。如果您的文件没有扩展名,则需要添加错误检查。