Skapa arkiv + fil lista

Tråden skapades och har fått 3 svar. Det senaste inlägget skrevs .
1
  • Oregistrerad
  • 2004-10-04 21:40

Jag har suttit och pillat på en arkiveringsdropplet i applescript, det har mest handlat om klippa och klistra om jag ska vara ärlig.

Det jag vill ska hända när man droppar filerna på dropleten är att jag vill generera ett zip arkiv innehållande alla filer samt ett textdocument innehållande namnet på alla filerna, gärna en fil på varje rad.

Själva zippningsdelen har jag fått ordning på, men hur skapar jag en textfil med namnet på alla filer droppade på dropleten?

Jag har provat nåt i stil med:

tell application "TextEdit"
						activate
						make new document at front
						tell document 1
							repeat with i from 1 to the count of these_items
								set paragraph 1 to "
" & this_item
								
							end repeat
							-- här vill jag spara						end tell
					end tell

Det funkar sådär, men jag får aldrig till att spara utan att få upp dialog. these_items är de filer som är dragna till droppleten.

Någon som kan hjälpa mig med skapandet av denna fil lista? Jag har redan skrivit över hela mitt skrivbord en gång X(

Mitt förslag är att du skippar TextEdit helt och hållet. AppleScript kan skriva till textfil helt på egen hand, mycket snabbare och bättre. Använd den här rutinen (repeat-loopen är bara så att du ska se hur det funkar, ersätt den med dina egna filnamn)

property myLogFile : (path to desktop as string) & "Arkiveringslogg.txt" -- klistras in längst upp i scriptet

repeat with i from 1 to 10
	WriteToLog(i as string)
end repeat


on WriteToLog(myLogString) --subrutin som tar en sträng som argument
	set fileRef to (open for access file myLogFile with write permission)
	write myLogString & return to fileRef starting at eof
	close access fileRef
end WriteToLog
  • Oregistrerad
  • 2004-10-04 22:30

Ah kalas, man tackar och bockar

  • Oregistrerad
  • 2004-10-04 22:39

Och här kommer hela scriptet för den som vill, känns som credd borde delas ut men tyvärr har detta script skapats genom en frensi av klippandes och klistrandes. Jag brukar vara bra på att veta vad jag vill göra men inte hur jag skall gå tillväga, jag är mer "form" än "kod"

property myLogFile : (path to desktop as string) & "Arkiveringslogg.txt"

on open these_items
	
	tell application "Finder"
		set tempFolderPath to path to "temp" as string
		set tempFolderName to my UniqueName(tempFolderPath, "Archive")
		
		if (tempFolderName is not anything) then
			try
				set theFolder to choose folder with prompt "Välj destination:"
				
				display dialog "Projektnamn: (Avdelning-datum-projekt)" default answer "Archive.zip"
				set theName to text returned of the result
				set archiveName to my UniqueName(theFolder, theName)
				
				if (archiveName is not anything) then
					set tempFolder to make new folder at tempFolderPath with properties {name:tempFolderName}
					repeat with i from 1 to the count of these_items
						set this_item to item i of these_items
						duplicate this_item to tempFolder
					end repeat
					
					set theSource to quoted form of (POSIX path of (tempFolder as alias))
					set theDest to quoted form of ((POSIX path of theFolder) & archiveName)
					do shell script "/usr/bin/ditto -c -k --sequesterRsrc " & theSource & " " & theDest
				else
					display dialog "Arkivet kunde ej sparas: För många filer med samma namn."
				end if
				delete tempFolder
			end try
		else
			display dialog "Arkivet kunde ej sparas: För många filer med samma namn."
		end if
	end tell
	
	repeat with i from 1 to the count of these_items
		WriteToLog(this_item as string)
	end repeat
end open

on UniqueName(baseFolder, itemName)
	tell application "Finder"
		set basePath to baseFolder as string
		set savedDelims to AppleScript's text item delimiters
		set AppleScript's text item delimiters to "."
		set theTextItems to text items of itemName
		if ((count of theTextItems) > 1) then
			set baseName to (items 1 thru -2 of theTextItems) as text
			set theExt to "." & (item -1 of theTextItems)
		else
			set baseName to itemName
			set theExt to ""
		end if
		set AppleScript's text item delimiters to savedDelims
		
		set tempName to itemName
		set i to 0
		repeat while ((folder (basePath & tempName) exists) and (i < 1000))
			set i to i + 1
			set tempName to baseName & i & theExt
		end repeat
		if (i < 1000) then
			return tempName
		else
			return anything
		end if
	end tell
end UniqueName

on WriteToLog(myLogString) --subrutin som tar en sträng som argument
	set fileRef to (open for access file myLogFile with write permission)
	write myLogString & return to fileRef starting at eof
	close access fileRef
end WriteToLog

1
Bevaka tråden