1

我正在尝试更改文件的名称。如果能够更改“显示名称”属性,这似乎很简单。但我不断收到此错误:

Can't set displayed name of alias "Path:to:file:" to "New_name"

这是我正在使用的文件夹操作脚本(即保存的applescript,然后使用文件夹操作设置服务将其分配给我的文件夹):

on adding folder items to this_folder after receiving these_items
    try
        repeat with this_item in these_items
            tell application "Finder" to set displayed name of this_item to "New_Name"
        end repeat

    on error error_message number error_number
        display dialog error_message buttons {"Cancel"} default button 1 giving up after 120
    end try
end adding folder items to

我发现的所有执行类似操作的脚本(例如这个问题)首先获取“名称”属性,然后剥离扩展名。我宁愿直接进入“显示名称”属性。

4

2 回答 2

3

如果文件具有 Finder 无法识别的扩展名或启用了显示所有扩展名,则显示的名称可以包含扩展名。

附加以前的扩展不会那么复杂:

tell application "Finder"
    set f to some file of desktop
    set name of f to "New_name" & "." & name extension of f
end tell

如果文件没有扩展名或 Finder 无法识别扩展名,这也可以:

set text item delimiters to "."
tell application "Finder"
    set f to some file of desktop
    set ti to text items of (get name of f)
    if number of ti is 1 then
        set name of f to "New_name"
    else
        set name of f to "New_name" & "." & item -1 of ti
    end if
end tell

如果您使用 Automator 创建了文件夹操作,则可以使用这样的 do shell 脚本操作:

for f in "$@"; do
    mv "$f" "New_name.${f##*.}"
done
于 2012-12-27T12:22:51.177 回答
1

Lauir Ranta 的回答对于Finder是正确的。

但在发表我的评论后,我记得系统事件比 Finder 更深入地看待事物。

所以我交换了命令以将名称从Finder更改为系统事件 所以现在它可以工作了。

之前我有一个名为“someFile.kkl”的文件并且扩展名刚刚组成。 Finder将返回 "" 作为扩展名并重命名不带扩展名的文件。“新名字”

但是当 系统事件发生时 ,它会看到扩展名并将名称设置为“newName.kkl”

tell application "Finder" to set thisFile to (item 1 of (get selection) as alias)


tell application "System Events"
    if name extension of thisFile is "" then

        set name of thisFile to "newName"
    else
        set name of thisFile to ("newName" & "." & name extension of thisFile)

    end if

end tell

在文件夹操作中设置。

on adding folder items to this_folder after receiving these_items
    try
        repeat with this_item in these_items
            tell application "System Events"
                if name extension of this_item is "" then

                    set name of this_item to "new_Name"
                else
                    set name of this_item to ("new_Name" & "." & name extension of this_item)

                end if

            end tell
        end repeat

    on error error_message number error_number
        display dialog error_message buttons {"Cancel"} default button 1 giving up after 120
    end try
end adding folder items to
于 2012-12-31T11:15:23.423 回答