Unrar-skript

Tråden skapades och har fått 5 svar. Det senaste inlägget skrevs .
1

Jag försöker skapa ett skript som automatisk packar upp rar-filer som läggs i en mapp.
Jag har knytit en folder action till min mapp (Downloads/).
När jag slänger in en rarfil körs unrarx igång och packar upp filen.
Men om jag slänger in en mapp som innehåller rar-filer händer ingenting.

Hur ska jag få mitt skript att även gå in i undermappar?

on adding folder items to this_folder after receiving added_items
	
	tell application "Finder"
		repeat with aFile in added_items
			if the name extension of aFile is in {"rar"} then
				tell application "Finder"
					open aFile
				end tell
			end if
		end repeat
	end tell
end adding folder items to
  • Medlem
  • 2006-09-13 09:59
Ursprungligen av don_thomaso:

Hur ska jag få mitt skript att även gå in i undermappar?

Kort svar: du måste kolla om "aFile" är en mapp och i så fall hoppa in i en ny "repeat with aFile..."-snurra för varje objekt i den mappen. Det löser du nog enklast genom att skapa två handlers till, en för att hantera mappar och en för att hantera filer.

Gömd på Apples hemsida finns denna samling med AppleScript-snuttar. Kolla in "Finder Droplets" - där finns exempel på script som hanterar det du är ute efter.

Så här skulle det kunna fungera - med reservation för att jag inte testat, men nåt får du väl göra själv ;):

property extension_list : {rar}

on adding folder items to this_folder after receiving added_items

  repeat with i from 1 to the count of added_items
    set this_item to (item i of added_items)
    set the item_info to info for this_item
    if folder of the item_info is true then
      process_folder(this_item)
    else if (alias of the item_info is false) and ¬
        (the name extension of the item_info is in the extension_list) then
      process_item(this_item)
    end if
  end repeat
end adding folder items to

-- this sub-routine processes folders
on process_folder(this_folder)
  set these_items to list folder this_folder without invisibles
  repeat with i from 1 to the count of these_items
  set this_item to alias ((this_folder as text) & (item i of these_items))
  set the item_info to info for this_item
  if folder of the item_info is true then
    process_folder(this_item)
  else if (alias of the item_info is false) and ¬
      (the name extension of the item_info is in the extension_list) then
    process_item(this_item)
  end if
end repeat
end process_folde

- this sub-routine processes files
on process_item(this_item)
  tell application "Finder" to open this_item
end process_item
Ursprungligen av wlao:

Kort svar: du måste kolla om "aFile" är en mapp och i så fall hoppa in i en ny "repeat with aFile..."-snurra för varje objekt i den mappen. Det löser du nog enklast genom att skapa två handlers till, en för att hantera mappar och en för att hantera filer.

Gömd på Apples hemsida finns denna samling med AppleScript-snuttar. Kolla in "Finder Droplets" - där finns exempel på script som hanterar det du är ute efter.

Så här skulle det kunna fungera - med reservation för att jag inte testat, men nåt får du väl göra själv ;):

property extension_list : {rar}

on adding folder items to this_folder after receiving added_items

  repeat with i from 1 to the count of added_items
    set this_item to (item i of added_items)
    set the item_info to info for this_item
    if folder of the item_info is true then
      process_folder(this_item)
    else if (alias of the item_info is false) and ¬
        (the name extension of the item_info is in the extension_list) then
      process_item(this_item)
    end if
  end repeat
end adding folder items to

-- this sub-routine processes folders
on process_folder(this_folder)
  set these_items to list folder this_folder without invisibles
  repeat with i from 1 to the count of these_items
  set this_item to alias ((this_folder as text) & (item i of these_items))
  set the item_info to info for this_item
  if folder of the item_info is true then
    process_folder(this_item)
  else if (alias of the item_info is false) and ¬
      (the name extension of the item_info is in the extension_list) then
    process_item(this_item)
  end if
end repeat
end process_folde

- this sub-routine processes files
on process_item(this_item)
  tell application "Finder" to open this_item
end process_item

Tack för hjälpen!

Ska sätta mig och koda klart mitt skript nu.

Jag har precis en sån här lösning fungerande på hemdatorn. Jag använder dock inte Unrar utan MacPAR deLuxe som har inbyggt att kasta bort delfilerna efter lyckad uppackning.

Du kan få mitt script om du påminner mig ikväll.

  • Medlem
  • 2007-02-22 01:07

Har du möjlighet att lägga upp scriptet?

Eftersom jag är total novis på AppleScript, så har jag några funderingar till den som kan:

Hur skulle ett skript som gör följande se ut?:

1. Skriptet kollar om det som hamnade mappen (med skriptet kopplat som Folder Action) är en fil eller mapp, och då även gå ner i eventuell mapp och "kolla"

2. Kolla om det finns fler filer än en med filändelsen .rar, om det finns det så ska enbart en av filerna (med antingen 001.rar eller 01.rar i filnamnet) öppnas

3. Öppna filen (eventuellt med definierat program)

4. Stänga definierat program

Det är en trestegsraket jag använder

1. Laddar ner med Azureus. Ställ in att Azureus flyttar färdiga filer till en särskild mapp. I exemplet nedan använder jag mappen Downloads.

2. Mappen Downloads har ett mappscript som startar ett Automator-program när något nytt händer i mappen (se pkt 1).

3. Automator-programmet söker i mappen Downloads efter filer som slutar med .rar och skickar dom vidare till MacPAR deLuxe (som kan fås att slänga delfilerna när den är klar).

- - -

Scriptet ser ut så här. Spara med Manusredigeraren och lägg in som mappscript på mappen Downloads

on adding folder items to this_folder after receiving these_items
tell application "Packa upp rar i Downloads"
launch
end tell
end adding folder items to

- - -

Automator-programmet ställs in enligt bilden och sparas som ett program med namnet Packa upp rar i Downloads. Programmets namn måste vara på bokstaven lika som i scriptet annars funkar det inte. Namnet man använder är godtyckligt bara det är samma på båda ställena.

Senast redigerat 2007-02-25 13:30
1
Bevaka tråden