Dateien aus einem Programm Bundle kopieren

MichaHo

MichaHo

Aktives Mitglied
Thread Starter
Dabei seit
09.11.2010
Beiträge
121
Reaktionspunkte
8
Hallo,

ich versuche gerade ein Applescript Programm Bundle zu erstellen. (Wie das geht weis ich)

ich habe im Ordner Resources des Bundles einen Ordner erstellt und dort .png Dateien gespeichert.

Jetzt möchte ich gerne wenn das Programm startet, alle Dateien dieses Unterordners in einen Ordner auf der Festplatte speichern. (Bei demjenigen, der das Programm ausführt)

das kopieren und definieren des Zielordners ist kein Problem, aber wie greife ich auf einen Ordner des Bundles zu?

ich habe es mit
Code:
set sourceFolder to path to resource "/ImageNewBlue"
versucht, das geht aber leider nicht.

wie kann ich es denn erreichen, das ich alle Files innerhalb des Unterordners kopiert bekomme?

Vielen Dank

Grüße

Micha
 
nimm halt
path to me
damit du das script/bundle selber kriegst und dann danach in abhängigkeit dazu.
 
Hmm, versteh ich nicht so ganz...

Code:
set sourceFolder to path to me & "/ImageNewBlue/"

klappt leider auch nicht :-(
 
mit folgendem Code klappt es schon fast.

der Ordner innerhalb des Bundles wird gefunden und wenn ich den Pfad über den Finder (Gehe zu) öffne, öffnet sich auch der entsprechende Ordner der App.

Aber die weitere Routine kann mit every file nichts anfangen....

was läuft denn da falsch?

Code:
tell application "Finder"
	set sourceFolder to POSIX path of (path to me as text) & "Contents/Resources/ImageNewBlue"
	set destFolder to "~/Downloads/Temp"
	set moveFiles to every file of sourceFolder
	repeat with theFile in moveFiles
		duplicate theFile to folder destFolder
	end repeat
end tell
 
Du verwendest POSIX Pfade, damit kann AppleScript nichts anfangen. Entweder du benutzt die Finder-konforme Schreibweise (folder "blah" of folder "blubb") oder "alias ":blubb:blah:":

Code:
[B]tell [/B][COLOR=#0433FF][FONT=Verdana][I]application[/I][/FONT][/COLOR][FONT=Verdana] "Finder"
[/FONT][FONT=Verdana]    [B]set[/B] [COLOR=#4F8F00]sourceFolder[/COLOR] [B]to[/B] ([COLOR=#012FBE][B]path to[/B][/COLOR] [B]me[/B] [COLOR=#012FBE]as[/COLOR] [COLOR=#0433FF][I]text[/I][/COLOR]) & "Contents:Resources:ImageNewBlue"[/FONT]
[FONT=Verdana]    [B]set[/B] [COLOR=#4F8F00]destFolder[/COLOR] [B]to[/B] [COLOR=#0433FF][I]folder[/I][/COLOR] "Temp" [B]of[/B] [COLOR=#5730BE][I]downloads folder[/I][/COLOR][/FONT]
[COLOR=#4F8F00][FONT=Verdana][COLOR=#000000]    [B]set[/B] [/COLOR]moveFiles[COLOR=#000000] [B]to[/B] [B]every[/B] [/COLOR][COLOR=#0433FF][I]file[/I][/COLOR][COLOR=#000000] [B]of[/B] [/COLOR][COLOR=#0433FF][I]folder [/I][/COLOR]sourceFolder[/FONT][/COLOR]
[FONT=Verdana]    [B]repeat[/B] [B]with[/B] [COLOR=#4F8F00]theFile[/COLOR] [B]in[/B] [COLOR=#4F8F00]moveFiles[/COLOR][/FONT]
[COLOR=#0433FF][FONT=Verdana][COLOR=#000000]        [/COLOR][B]duplicate [/B][COLOR=#4F8F00]theFile [/COLOR]to [I]folder [/I][COLOR=#4F8F00]destFolder[/COLOR][/FONT][/COLOR]
[FONT=Verdana]    [B]end[/B] [B]repeat[/B][/FONT]
[B]end [/B][B]tell[/B]

Bei mir funktioniert

tell me to set sourceFolder to path to resource "ImageNewBlue"

übrigens ohne Probleme, solange es als Programm-Bundle gespeichert wird und der Ordner vorhanden ist.
 
Hi,

danke, das
Code:
tell me to set sourceFolder to path to resource "ImageNewBlue"
funktioniert bei mir auch.

auch das kopieren der Bilder aus dem App Ordner in den Temp Ordner funktioniert.

Jetzt wird es noch etwas komplizierter aber ich hab wohl nur den Pfad nicht richtig benannt.

die Bilder aus der einen App, sollen in eine andere App (in den Ordner Images unter Resources)

Ich hab es so versucht:

Code:
tell application "Finder"
	tell me to set sourceFolder to path to resource "ImageNewBlue"
	set destFolder to "~:Downloads:Temp:myPicture.app:Contents:Resources:Images" as alias
	set moveFiles to every file of folder sourceFolder
	repeat with theFile in moveFiles
		duplicate theFile to folder destFolder
	end repeat
end tell

Fehler ist das er die Datei unter destFolder nicht findet.

Hast Du hier noch eine Idee?

Grüße

Micha
 
Das mit der Tilde funktioniert nicht, du musst den vollständigen Pfad angeben.
 
den kenn ich aber doch nur auf meinem mac, nicht aber auf einem anderen....

muss doch irgendwie möglich sein...
 
Wie oben gezeigt: folder "Temp" of downloads folder gibt dir den Pfad vom Ordner Temp in Downloads Ordner zurück.

Oder so:

(path to downloads folder as string) & "Temp:" as alias
 
hallo nochmal,

meine App funktioniert soweit. allerdings muss das kopieren immer mit dem kennwort bestätigt werden.

leider hab ich keine möglichkeit gefunden dem duplicate befehl ein password mit zu geben.

hat da noch jemand eine idee das zu lösen?

hier mal der Programmcode, der die Dateien verschiebt.

die Pfade habe ich ganz am Anfang über property bekannt gemacht.

Code:
on setBlue(sourceFolder, destFolder)
	tell application "Finder"
		set moveFiles to every file of folder sourceFolder
		repeat with theFile in moveFiles
			duplicate theFile to folder destFolder with replacing
		end repeat
	end tell
end setBlue

danke euch, grüße

micha
 
hallo,

ich glaub ich steh etwas im Wald mit vielen Bäumen.

da meine Variante mit duplicate immer nach Kennwort fragt, habe ich das Script auf do shell script umgestellt. aber irgendwie krieg ich es nicht hin, es kommt immer der Fehler das die Datei nicht in Unicode Text umgewandelt werden kann, egal was ich versuche.... mit quoted form of POSIX path, ohne quoted form, und auch komplett ohne Umwandlung (dann findet er die Datei nicht)

kann jemand mal drüber schauen, was hier falsch ist.

Vielen Dank

Code:
on copFiles(sourceFolder, destFolder)
	tell application "Finder" to set movefiles to every file of folder sourceFolder
	repeat with theFile in movefiles
		set theFile to quoted form of POSIX path of theFile
		do shell script ("cp -f " & theFile & space & destFolder) password pass with administrator privileges
	end repeat
end copFiles

Grüße

Micha
 
nach langem Hin und her habe ich nun eine Lösung gefunden, die noch simpler ist als meine vorherige...

ich bin bei meiner recherche nach Shell Funktionen auf folgenden Thread eines anderen Forums gestoßen und habe den Code von dort übernommen.

http://www.fischer-bayern.de/phpBB2/viewtopic.php?t=1689 ziemlich weit unten.

hier nun die funktionierende eigentliche Funktion des Scripts:

Code:
on copFiles(sourceFolder, destFolder)
	do shell script "find \"" & sourceFolder & "\" -name \"*.png\" -exec cp -f \"{}\" \"" & destFolder & "\" \\;"
end copFiles

Grüße

Micha
 
Zurück
Oben Unten