Denna delen av 99 uppdateras inte längre utan har arkiverats inför framtiden som ett museum.
Här kan du läsa mer om varför.
Mac-nyheter hittar du på Macradion.com och forumet hittar du via Applebubblan.

Hilfe! Applescript och filstorlekar.

Tråden skapades och har fått 7 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • 2002-09-30 23:00

Har börjat titta närmare på det eminenta AppleScript under 10.2 men har stött på patrull som jag inte tar mig förbi. Låt oss säga att jag har en folder där jag vill ha tag i filer av en viss storlek, mindre än en viss storlek, eller större än en viss storlek. Hur sjutton hanterar Applescript det ? Jag kan inte gå via filnamn eftersom filerna bara har ett löpnummer men jag skulle kunna katalogisera dem efter storlek. Går det inte att göra detta i AppleScript ? Har letat & letat men obvius på fel ställe för jag hittar massor om hantering av foldrar och filer men inget om hur man kan plocka fram storleken på filen. Någon som vet ??

Egen idè:

Jag skulle nog kunna göra ett Posix anrop till shell och anropa ett Unixhack men det känns som att fuska ....

Mission
a) välja fil och läsa in filinfon till string
b) parsa ut filens storlek
c) göra nåt om filen är större/mindre än en viss storlek
ps.
kör scipten var för sig i manusredigeraren med resultatfönstret och apple events fönstret uppe så ser du vad som händer hela tiden.
ds.

---

a)
börja med att välja en fil och spara vilken i en variabel (theFile)
be om infon för den valda filen och spara den i theInfo

Citat:

code:<pre style="font-size:x-small; font-family: monospace;">set theFile to choose file
set theInfo to info for theFile</pre>

b
lägger till en rad för att hämta ut just filstorleken ur infon.

Citat:

code:<pre style="font-size:x-small; font-family: monospace;">set theFile to choose file
set theInfo to info for theFile
set theSize to size of theInfo as integer --integer blir lite normala siffror</pre>

c
åsså tar vi och gör en if sats för att kolla om storleken är mer eller mindre än 500000 bytes (0,5mb) eller om den faktiskt är exakt 0,5 mb.

Citat:

code:<pre style="font-size:x-small; font-family: monospace;">set theFile to choose file
set theInfo to info for theFile
set theSize to size of theInfo as integer --integer blir lite normala siffror

if theSize is greater than 500000 then
display dialog "Filen är större än 0,5 mb"

else if theSize is 500000 then
display dialog "Filen är EXAKT 0,5 mb stor"

else
display dialog "Filen är mindre än 0,5mb"

end if</pre>

ungefär så kan man göra med AS för att leta upp olika storlekar.
--- ---

Du ville ju leta upp filer större/mindre än en viss storlek i en mapp.

1)läs in mappens filer i en lista
2)gå igenom listan och kolla storleken
3)om någon fil är ok, lägg in den i en ny lista

1
jag väljer att läsa in mappen som string. som standard får man ett alias (folder ny mapp of desktop folder of...)
Bättre med "Mac OS X:Desktop Folder:Ny Mapp" eller hur det nu kan bli.

Citat:

code:<pre style="font-size:x-small; font-family: monospace;">set theFolder to (choose folder) as string</pre>

2
Nu måste jag "trixa" lite. För det första så använder jag ett "tell application "finder"" för att få findern att göra lite arbete åt mig. Det jag vill att findern skall göra är att den skall lägga varje fil i en folder i en lista (every file of folder...) Det funkar bara i ett tell "finder" block.
Dessutom vill jag ju parsa ut alla filer som förhåller sig till en storlek på ett givet sätt. Jga har valt alla som är större än 500000bytes (0,5mb).

Jag skulle kunna använda mig av föregående exempel och be om infon, läsa in storleken till variabel och kolla variabeln mot mitt givna värde (500000) och sen med en if-sats antingen göra inget med just den filen eller lägga den sist i en lista som jag definierar i början av scriptet. Men, man kan också göra det enkelt för sig och använda sig av just tell app finder och en liten skojjig sak som heter "whose".

Citat:

code:<pre style="font-size:x-small; font-family: monospace;">set theFolder to (choose folder) as string
tell application "Finder" to set theFiles to every file of (folder theFolder) whose size is greater than 500000</pre>

Vill man leta upp mindre filer så är det ju "smaller than..." man använder. Sen kan man ju leta efter låsta filer med "whose locked is true" eller alla filer som (på min dator) är kopplade till Photoshop - whose default application is alias "Arbeten:Applications:Adobe Photoshop 7:Adobe Photoshop 7.0:" osv osv.

Inte så knepigt - om man inte vill... kör hårt
/Mattias

[ 01 Oktober 2002, 00:16: Meddelandet ändrat av: Mattias Jonsson ]

  • Medlem
  • 2002-10-01 19:32

Mattias,

Jag bugar & bockar. Inte bara för att du löst mitt problem men även på det sätt du gjort det. Pedagogiskt och med enkla beskrivande exempel. Jag har lärt mig mycket om hur man får fram fil informationen med hjälp av dina eminenta exempel.

Återigen Tack!

  • Medlem
  • 2002-10-01 19:42

Mattias,

Jag bugar & bockar. Inte bara för att du löst mitt problem men även på det sätt du gjort det. Pedagogiskt och med enkla beskrivande exempel. Jag har lärt mig mycket om hur man får fram fil informationen med hjälp av dina eminenta exempel.

Återigen Tack!

Kan rekommendera en sökning på Amazon.co.uk efter böcker om Applescript. Två av dem har jag: Applescript in a Nutshell och Applescript for Applications. Kan berätta mer om det finns intresse för det.

/Ola

Citat:

quote:Skapades ursprungligen av: Taz_1999:
Kan rekommendera en sökning på Amazon.co.uk efter böcker om Applescript. Två av dem har jag: Applescript in a Nutshell och Applescript for Applications. Kan berätta mer om det finns intresse för det.

/Ola

Jo, dom är inte fel.
Mina favoriter finns här...
http://www.AppleScriptSourcebook.com/
och
http://www.macscripter.net/
och, framför allt annat
Bill Briggs eminenta Applescript Primer
http://maccentral.macworld.com/columns/briggs.shtml
Låt er inte luras av att sista skrevs 2001 - dom är fortfarande väldigt bra. Börja nerifrån och arbeta uppåt.

Ställ gärna fler frågor - det är skoj med utmaningar

  • Medlem
  • 2002-10-02 21:07

Mattias & Tax_1999,

Ni har båda fått mig att skåda ljuset. Jag börjar förstå kraften i AppleScript. Det hör ju naturligtvis till god ton att också visa sina läromästare sina alster. Något jag alldeles glömde bort igår i min iver att "hacka".

Nåja, här är ett exempel på ett Script som jag behövde för att kunna plocka bort filer av en viss storlek ur en valfri mapp. Det visar också hur man använder sig utav listor och stegar sig igenom en lista med ett repeat villkor, listor är en central del av AppleScript. Scriptet är kört under Jaguar.

Citat:

code:<pre style="font-size:x-small; font-family: monospace;">set theFolder to (choose folder) as string
tell application "Finder" to set theFiles to every file of (folder theFolder) whose size is 870
set i to 1
repeat until i > (count of theFiles)
set TheFile to item i of theFiles
-- The row below only for debug info
-- display dialog "The info is " & TheFile
tell application "Finder"
delete TheFile
end tell
set i to i + 1
end repeat</pre>

Du ser... inte illa.
Man kan göra dendär repeat satsen på ett ännu enklare sätt.
Du har en lista som innehåller ett antal olika strängar.

I ställer för att använda en räknare som du gjort så kan man göra såhär.

Jag förutsätter att listan heter theList

Citat:

code:<pre style="font-size:x-small; font-family: monospace;">repeat with theItem in theList
--gör något med theItem
end repeat</pre>

Så, din kod skulle se ut såhär om man anväde det sättet (även om båda funkar förträffligt):

Citat:

code:<pre style="font-size:x-small; font-family: monospace;">set theFolder to (choose folder) as string
tell application "Finder" to set theFiles to every file of (folder theFolder) whose size is 870
repeat with TheFile in theFiles
tell application "Finder"
delete TheFile
end tell
end repeat</pre>

/Mattias

1
Bevaka tråden