2012-12-25 76 views
1

我正在嘗試更改文件的名稱。似乎很簡單,如果能夠更改「顯示名稱」屬性。不過,我不斷收到此錯誤:使用applescript,我可以更改文件名而無需修改(或獲取)文件擴展名?

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 

所有我發現的腳本有類似的功能(例如this question)先獲取「name」屬性,然後剝離擴展名。我寧願直接去「顯示名稱」屬性。

回答

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 

這也將工作,如果文件沒有擴展名,或者如果擴展不被認可查找:

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 "[email protected]"; do 
    mv "$f" "New_name.${f##*.}" 
done 
+0

我打算髮佈一個簡單的檢查,如果指定的擴展名不是「」。但是做了一個虛假擴展的測試。並得到「」。所以謝謝你讓我更密切地關注它。腳本參考。不要解釋,如果發現者不承認擴展它將返回「」它。因此,在我想發佈的正常腳本中將會刪除擴展名。 +1 – markhunte

+0

發表我的評論後,我記得系統事件可能會有所不同。它確實看到我的答案 – markhunte

1

Lauir Ranta的回答對於Finder是正確的。

但發表我的評論後,我記得系統事件看起來比Finder更深入一些。

所以我換了命令的名字從搜索系統事件 所以現在它的工作原理改變。

之前,當我有一個名爲「someFile.kkl」的文件,並且擴展是剛剛組成的。 Finder將返回「」作爲擴展名,並重命名沒有擴展名的文件。 「了newName」

但當系統事件做它它看到的擴展,並將名字改爲「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