Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
iScript •---->


Anmeldedatum: 29.03.2001 Beiträge: 1116
|
Verfasst am: 01.04.2001 - 23:22 Titel: Dateiselection bei Droplets |
|
|
Ein Hallöle an die Gemeinde!
Ich habe mich als Newbie auch mal an das Scripting gewagt, und bin schon begeistert, das mein erstes Script schon mal das macht, was es machen soll. Doch leider habe ich ein (vermutlich banales) Problem und zähle voll auf eure Sachkompetenz! Ein grosses Lob zunächst einmal für dieses Forum! Da halte ich's mit der Dallmeyer-Prodomo-Werbung: Schön, das es soetwas noch gibt!
Also zurück zu meinem Problem: Kleine Erklärung zum Script: Das Script soll nichts anderes machen, als Dateien nach gewissen Kriterien umzubenennen (Kriterien werden via Dialog abgefragt). Die Dateien kommen immer aus einem Programm und heißen immer x, x.1, x.2, usw.
Durch den ersten Teil des Scripts bekommen die Dateien Namen, wie ich sie brauche. Im zweiten Teil des Scripts werden die Dateien nach dem Umbenennen in zwei Unterordner dupliziert (1x duplikat u. 1x move).
Soweit funktioniert auch alles prima. Mein Problem ist, das das Script als Droplet verwendet wird. Zieht man die einzelnen Dateien (x, x.1, ...) auf das Script läuft alles gut, aber nur, wenn der Ursprungsordner geöffnet war! Zieht man den kompletten Order aufs Script, klappts nicht. Ebensowenig funktionierts, wenn die einzelnen Dateien aus einem "aufgeklapptem" Ordner aus der Listen-Ansicht auf das Droplet gezogen werden? Wie kann ich das abfangen? Habe auch schon versucht, den Ordner vorm Ausführen als allererstes im Script zu öffnen, aber das gelingt nicht bzw. nützt nix. Was ist denn für AppleScript die "selection" wenn man die Dateien nach den unterschiedlichen Methoden aufs Script zieht. Oder wie lege ich anders einen Pfad auf den Ordner (ohne ihn vorher zu wissen), wenn nicht über "first window"?
Fragen über Fragen. Ich glaube das reicht zunächst...
Hier das abgespeckte Script zur Veranschaulichung. (Ich hoffe, ihr grinst euch nicht tot über die stümperhafte Struktur!)
Vielen Dank im Voraus
- Holli -
on open
tell application "Finder" to tell selection
...
-- ein paar Dialoge als Abfragen für die Umbenennung (Variablen für die Benennung werden übergeben
...
if variable1 is 1 then -- Bedingung für Umbenennung
tell its item named "x" to set name to "01a_" & variable2 & variable3 & variable4 -- Start der Umbenennung
tell its item named "x.1" to set name to "01i_" & variable2 & variable3 & variable4
if (file "x.2" exists) is true then
tell its item named "x.2" to set name to "02a_" & variable2 & variable3 & variable4
tell its item named "x.3" to set name to "02i_" & variable2 & variable3 & variable4
end if
...
und so weiter
...
end if
end tell
tell application "Finder"
activate
if the variableX is "JA" then
make new folder at first window with properties ¨
{name:"Folder1"}
make new folder at first window with properties ¨
{name:"Folder2"}
duplicate every file of first window to folder "Folder1" of first window
move every file of first window to folder "Folder2" of first window
set zaehlerende to (count items in folder "Folder1" of first window)
repeat with zaehler from 1 to zaehlerende -- Dateischleife
set name of file zaehler of folder "Folder1" of first window to "L-" & name of file zaehler of folder "Folder1" of first window
set name of file zaehler of folder "Folder2" of first window to "R-" & name of file zaehler of folder "Folder2" of first window
end repeat -- nächste Datei im Ordner
end if
end tell
end open _________________ - anholn deit kriegen - |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 02.04.2001 - 19:26 Titel: Dateiselection bei Droplets |
|
|
Hallo Holli,
mit einer Finder-Selection zu arbeiten ist recht umständlich und problematisch (das hast du ja bereits festgestellt).
Wenn du dein Skript als Droplet gestalten willst, gilt folgendes Grundgerüst:
on open dieListe
-- statements zur Abarbeitung
end open
Ein Droplet sollte als "Applet" (ohne Startdialog) gesichert werden.
Wenn du jetzt einen Ordner oder eine Datei auf das Droplet ziehst, wird die Referenz zu diesem Objekt in der Variablen "dieListe" abgelegt. Bei dieser Variablen handelt es sich immer um eine Liste. Es muss eine Liste sein, damit man auch mehrere Objekte auf das Droplet ziehen kann.
Beispiel:
Du hast auf deinem Desktop den Ordner "MeinOrdner". Diesen ziehst du auf das Droplet.Die Variable "dieListe" hat nun folgenden Inhalt: {alias "Macintosh HD:Desktop Folder:MeinOrdner:"}
Ziehst du zwei Ordner auf das Droplet sieht es in der Variablen so aus:
{alias "Macintosh HD:Desktop Folder:MeinOrdner:", alias "Macintosh HD:Desktop Folder:ZweiterOrdner:"}
Ordner haben immer einen Doppelpunkt hinter dem Namen. Das Betriebssystem verwendet den Doppelpunkt, um die Ordnerhierarchien darzustellen. Deshalb kann man einen Doppelpunkt auch nicht in einem Datei- oder Ordnernamen verwenden.
Wenn du eine Datei und einen Ordner auf das Droplet ziehst, bekommst du folgenden Listeninhalt:
{alias "Macintosh HD:Desktop Folder:Datei-Eins", alias "Macintosh HD:Desktop Folder:MeinOrdner:"}
Wenn du das mal testen willst, schreib schnell dieses Skript:
on open dieListe
display dialog dieListe
end open
Wenn du jetzt was auf das Droplet ziehst, bekommst du eine Fehlermeldung, da im Dialog ein Text angezeigt werden muss, die Variable "dieListe" jedoch eine Liste enthält.
Aber dadurch siehst du genau, wie der Inhalt der Variablen aussieht.
Um keine Fehlermeldung zu erhalten, müsstest du folgende Änderung vornehmen:
display dialog (dieListe as string)
Dann wird dir im Dialog aber nur die reine Pfadangabe angezeigt - etwa so:
Macintosh HD:Desktop Folder:MeinOrdner:
Bei mehreren Ordnern wird es dann schon verwirrend:
Macintosh HD:Desktop Folder:MeinOrdner:Macintosh HD:Desktop Folder:ZweiterOrdner:
Zurück zum Droplet:
Zur weiteren Bearbeitung musst du jetzt ein Objekt in der Liste ansprechen. Listeninhalte werden durch item 1, item 2 usw. of dieListe angesprochen.
Das würde dann so aussehen:
on open dieListe
set aktueller_Ordner to (item 1 of dieListe)
end open
Die einzelnen Dateien könntest du jetzt ebenfalls wieder in eine Liste setzen.
on open dieListe
set aktueller_Ordner to (item 1 of dieListe)
tell application "Finder"
set Datei_Liste to (every file of aktueller_Ordner)
end tell
end open
Wie Ordner inklusive ihrer Unterordner abgearbeitet werden können siehst du im Beispiel "Rekursive Handler" im Workshop bei Fischer-Bayern.de.
Außerdem würde ich dir empfehlen, die bisherigen Ausgaben des MacScripter's Magazine herunterzuladen. Das ist ein interaktiver AppleScript-Kurs, der wirklich Spass macht.
In Ausgabe 2 werden Referenzen und Pfadangaben genau erklärt.
Die 3 Ausgaben findest du ebenfalls auf meiner Website.
In ein paar Tagen dürfte ich mit der 4. Ausgabe fertig sein. Dort geht es dann unter anderem auch um Droplets.
Happy scripting _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com
Zuletzt bearbeitet von Snow am 01.03.2003 - 16:23, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
iScript •---->


Anmeldedatum: 29.03.2001 Beiträge: 1116
|
Verfasst am: 02.04.2001 - 21:45 Titel: Dateiselection bei Droplets |
|
|
many thanks, snow!
Vielen Dank für deine ausführlichen Ausführungen. Damit sollte ich eigentlich zurechtkommen. In den ersten beiden Teilen von MacSciptors Magazin konnte ich irgendwie keine rechte Antwort auf diese Problematik finden, aber Du hast mich ja ein gutes Stück weitergebracht.
Gehabt euch wohl + und bis zum nächsten Mal! _________________ - anholn deit kriegen - |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2002 phpBB Group Deutsche Übersetzung von phpBB.de
|
|
|