Behöver hjälp med ett Folder Actions-script

Tråden skapades och har fått 10 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Göteborg
  • 2010-09-10 21:48

Har försökt hitta ett Folder actions script som sorterar hämtade filer mappen. Hittade denna kod, som jag sparade som en scpt fil gick sedan in under inställningar för mappkommandon och ställde in hämtade filer mappen och valde mitt script. Det fungerar dock inte, så har jag missat något i koden eller i de övriga förfarandet ?

property image_extension_list : {"tif", "tiff", "gif", "png", "pict", "pct", "jpg"}
property media_extension_list : {"mp3", "avi", "mov", "mpg"}
property archive_extension_list : {"zip", "sit", "dmg", "tar", "hqx", "toast", "rar"}
property torrent_extension_list : {"torrent"}
property pdf_extension_list : {"pdf"}

property image_foldername : "images"
property media_foldername : "media"
property archive_foldername : "archives"
property torrent_foldername : "torrents"
property pdf_foldername : "pdf"

on adding folder items to this_folder after receiving added_items

repeat with this_item in added_items
tell application "Finder"

if (the name extension of the this_item is in the image_extension_list) then

my makeamove(this_item, this_folder, image_foldername)

end if

if (the name extension of the this_item is in the media_extension_list) then

my makeamove(this_item, this_folder, media_foldername)

end if

if (the name extension of the this_item is in the archive_extension_list) then

my makeamove(this_item, this_folder, archive_foldername)

end if

if (the name extension of the this_item is in the torrent_extension_list) then

my makeamove(this_item, this_folder, torrent_foldername)

end if

if (the name extension of the this_item is in the pdf_extension_list) then

my makeamove(this_item, this_folder, pdf_foldername)

end if


end tell
end repeat
end adding folder items to

on makeamove(this_item, root_folder, target_foldername)

tell application "Finder"

if not (exists folder target_foldername of root_folder) then
make new folder at root_folder with properties {name:target_foldername}
end if

set the target_folder to folder target_foldername of root_folder

my resolve_conflicts(this_item, root_folder, target_folder)

move file this_item to the target_folder

end tell

end makeamove

on resolve_conflicts(this_item, root_folder, target_folder) --renames the item if dublicate exists in target folder

tell application "Finder"

set file_extension to the name extension of this_item
set the file_name to the name of this_item

if the file_extension is "" then
set the trimmed_name to the file_name
else
set the trimmed_name to text 1 thru -((length of file_extension) + 2) of the file_name
end if

if (exists document file file_name of target_folder) then

set the name_increment to 1

repeat
set the new_name to (the trimmed_name & "_" & (name_increment as string) & "." & file_extension) as string

if not (exists document file new_name of the target_folder) then

set the name of document file file_name of folder root_folder to the new_name
exit repeat
else

set the name_increment to the name_increment + 1

end if
end repeat
end if

end tell

return the file_name

end resolve_conflicts

  • Medlem
  • Göteborg
  • 2010-09-10 23:56

Har märkt nu att det fungerar lite random vissa av filerna plockar den andra inte.

Tycker nog att scriptet fungerar, men tänk på att det bara kan hantera filer (dvs inga mappar).

  • Medlem
  • Göteborg
  • 2010-09-11 11:28
Ursprungligen av gul-iMac:

Tycker nog att scriptet fungerar, men tänk på att det bara kan hantera filer (dvs inga mappar).

Jo precis men det verkar inte kunna hantera fler filer samtidigt, eller en del inte alls, har filer i som jag lägger i mappen nu som är .dmg 2 tar den och flyttar 1 kan den inte flytta samma med .pdf filer den klarar inte av att flytta dem. Samt har jag kört ett liknande på desktop och ifall jag flyttar alla filer från mappen de flyttas till tillbaka till desktop så tar den alla men flyttar jag dem först till en annan mapp, sen därifrån till desktop då flyttar den inte in dem

Det finns ett program, Hazel, som ligger och bevakar mappar och filer, när sedan t ex en JPG hamnar i "Nedladdat" kan du flytta den automatiskt till "Bilder" osv.

Är det det du försöker åstadkomma så prova Hazel.

Tycker du script är skoj, kör med det.

Jag har fortsatt att testa detta script och har hittat en variant, som är (ganska) repeterbar.

Min slutsats är att det är OSX/Applescript som är buggigt. I de fall där scriptet inte skapar/sorterar in filerna korrekt har inte handlern för folder actions triggats (on adding folder items to this_folder after receiving added_items har inte sett någon ändring av fönstret) och detta är ingenting som man kan ändra på från script-nivå.

I mina tester har funktionen varit bäst om man flyttar in "paket" av filer. Viktigt är också att låta scriptet gå färdigt, vilket ibland tar sin tid (vet inte varför ännu). Fortsätter att titta på detta.

På gång .....
Något skumt med "move"-satsen i rutinen makeamove(this_item, root_folder, target_foldername)

Har nu kollat lite mer och är nästan säker att detta är en dålig funktion i 10.6
Scriptet fungerar perfekt i Tiger (10.4).
Också testat lite i Leopard 10.5 men även här funktionen tveksam, ibland fungerar det ibland inte.
Boven är "move"-satsen. Varför den vägrar att utföras ibland har jag inte kommit på. Provat att låta "System Events" göra jobbet, men det har ingen inverkan på tillförlitligheten i scriptet.
Kanske finns det någon "scripter" på forumet som kan hjälpa, själv tror jag att jag lägger av detta projekt.

Eventstyrda scripts är inte lätta att skriva på ett säkert sätt. Jag instämmer därför helt i Goflorps rekommendation av Hazel, som är ett väldigt kraftfullt, och dessutom lättanvänt program.

OK "bonis", nu TROR jag att jag har en variant med bättre tillförlitlighet än tidigare variant. Prova den gärna!

property image_extension_list : {"tif", "tiff", "gif", "png", "pict", "pct", "jpg"}
property media_extension_list : {"mp3", "avi", "mov", "mpg"}
property archive_extension_list : {"zip", "sit", "dmg", "tar", "hqx", "toast", "rar"}
property torrent_extension_list : {"torrent"}
property pdf_extension_list : {"pdf"}

property image_foldername : "images"
property media_foldername : "media"
property archive_foldername : "archives"
property torrent_foldername : "torrents"
property pdf_foldername : "pdf"

on adding folder items to this_folder after receiving added_items
tell application "Finder"
repeat with this_item in added_items
if (the name extension of this_item is in image_extension_list) then
my makeamove(this_item, this_folder, image_foldername)
else if (name extension of this_item is in media_extension_list) then
my makeamove(this_item, this_folder, media_foldername)
else if (name extension of this_item is in archive_extension_list) then
my makeamove(this_item, this_folder, archive_foldername)
else if (name extension of this_item is in torrent_extension_list) then
my makeamove(this_item, this_folder, torrent_foldername)
else if (name extension of this_item is in pdf_extension_list) then
my makeamove(this_item, this_folder, pdf_foldername)
end if
end repeat
end tell
-- Try this to reset folder action in case file was not in the above set
tell application "System Events" to set folder actions enabled to false
delay 1
tell application "System Events" to set folder actions enabled to true

end adding folder items to

on makeamove(this_item, root_folder, target_foldername)
tell application "Finder"
if not (exists folder target_foldername of root_folder) then
tell application "System Events" to set folder actions enabled to false -- we don't want to trigger the script
make new folder at root_folder with properties {name:target_foldername}
--delay 1
tell application "System Events" to set folder actions enabled to true -- turn on the folder script again
end if
set target_folder to folder target_foldername of root_folder
my resolve_conflicts(this_item, root_folder, target_folder)
tell application "System Events" to set folder actions enabled to false -- we don't want to trigger the script
move item this_item to target_folder
tell application "System Events" to set folder actions enabled to true -- turn on the folder script again

end tell

end makeamove

on resolve_conflicts(this_item, root_folder, target_folder) --renames the item if duplicate exists in target folder
tell application "Finder"
set file_extension to name extension of this_item
set file_name to name of this_item
set trimmed_name to text 1 thru -((length of file_extension) + 2) of file_name
if (exists item file_name of target_folder) then
set name_increment to 1
repeat
set new_name to (trimmed_name & "_" & (name_increment as string) & "." & file_extension) as string
if not (exists item new_name of target_folder) then
set name of item file_name of folder root_folder to new_name
exit repeat
else
set name_increment to name_increment + 1
end if
end repeat
end if
end tell
return file_name
end resolve_conflicts

  • Medlem
  • Göteborg
  • 2010-09-13 21:59

Tackar så mycket, skall testa det och se hur det fungerar

1
Bevaka tråden