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

Anmeldedatum: 13.02.2004 Beiträge: 26 Wohnort: Graz
|
Verfasst am: 13.02.2004 - 01:06 Titel: aus liste dateien auslesen |
|
|
hallo,
ich möchte den compi nach allen dateien mit ".mp3" - Endung durchwühlen.
Habe Heute erst angefangen und komme nicht weiter als so
set dieserOrdner to alias "Festplatte:Users:michaelworobcuk:applescripttest:"
set neuerOrdner to alias "Festplatte:Users:michaelworobcuk:neu:"
tell application "Finder"
set mp3liste to name of every file of dieserOrdner whose name ends with ".mp3"
end tell
damit habe ich wohl alle mp3´s in die liste ´mp3liste´geschrieben.
aber wie bekomme ich den finder dazu die dateien die in der liste stehen auch zu bewegen?
bin noch blutiger anfänger.
habt Mitleid....
Danke schonmal |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 13.02.2004 - 23:52 Titel: |
|
|
Du brauchst nur noch eine entsprechende Schleife einbauen, die eine Datei nach der anderen verschiebt.
repeat with oneMP3 in mp3Liste
try
move oneMP3 to neuerOrdner -- with replacing
on error
-- Im Fehlerfall passiert hier nichts
end try
end repeat _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 14.02.2004 - 00:02 Titel: |
|
|
Nachtrag:
Habe gerade noch gesehen, dass du ja nur die Namen der MP3-Dateien in die Liste verfrachtet hast. Das nützt natürlich wenig - du brauchst eine gültige Referenz.
Also:
set mp3Liste to every file of dieserOrdner whose name ends with ".mp3" _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com |
|
Nach oben |
|
 |
originalhanno •-->

Anmeldedatum: 13.02.2004 Beiträge: 26 Wohnort: Graz
|
Verfasst am: 14.02.2004 - 13:40 Titel: nach Itunes importieren? |
|
|
staak, schonmal vielen Dank dafür,
jetzt noch gleicch einige Frage:
Kann ich die Dateien die jetzt in meiner Liste stehen auch direkt nach Itunes importieren?
Wo kann ich sehen welches Programm welche Befehle für Applescript zur Verfügung stellt?
Du hast in einem Beitrag in dem jemand nach dem Durchsuchen der ganzen Festplatte gefragt hat auf einen Workshop verwiesen. Ich habe danach gesucht, ihn aber nicht gefunden. Die Frage also:
Wie kann ich meine ganze Festplatte nach Mp3´s durchwühlen?
Und nich die letzte: Es gibt diesen Befehl mit dem ich einen Ordner auf das Script ziehen kann damit es startet, kann ich da auch z.B. die ganze festplatte oder einen User draufziehen?
Danke, und sorry für den ganzen Wust an Fragen...
Michael |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 14.02.2004 - 14:38 Titel: |
|
|
Hallo Michael,
gehen wir's an!
Zitat: | Kann ich die Dateien die jetzt in meiner Liste stehen auch direkt nach Itunes importieren? |
Ja, der Befehl 'add' fügt einen Song zu einer Playlist hinzu.
add: add one or more files to a playlist
add a list of alias -- the file(s) to add
[to location reference] -- the location of the added file(s)
Result: track -- reference to added track(s)
Zitat: | Wo kann ich sehen welches Programm welche Befehle für Applescript zur Verfügung stellt?
|
Einfach das entsprechende Programm auf den Skripteditor ziehen, dann öffnet sich das Befehlsverzeichnis (sofern das Programm scriptable ist).
Oder im Ablage-Menü des Skripteditors den Menüpunkt "Verzeichnis öffnen..." wählen und im darauf folgenden Dialog das entsprechende Programm auswählen.
Zitat: | Du hast in einem Beitrag in dem jemand nach dem Durchsuchen der ganzen Festplatte gefragt hat auf einen Workshop verwiesen. Ich habe danach gesucht, ihn aber nicht gefunden. Die Frage also:
Wie kann ich meine ganze Festplatte nach Mp3´s durchwühlen?
|
Siehe:
http://www.fischer-bayern.de/applescript/html/rekursiv.html
Ein Handler (oder auch Sub-Routine) ist ein Programmteil, der nicht automatisch mit Scriptablauf ausgeführt wird. Für diesen Programmteil muss innerhalb des Skripts ein extra Aufruf vorhanden sein. Da man an diesen Programmteil auch Parameter übergeben kann, spart man sich natürlich viel Schreibarbeit. Stell dir vor, du brauchst immer wieder die gleichen Befehle - diese müssen aber unterschiedliche Parameter verarbeiten. Wenn man dies normal im Skripttext schreiben würde, bekäme man ein ewig langes Skript und müsste sehr oft genau die gleichen Zeilen wieder schreiben. - Eine Sub-Routine schreibst du nur einmal und kannst sie von verschiedenen Stellen im Skript aus aufrufen (jeweils mit unterschiedlichen Parametern).
Ein rekursiver Handler ist nun so ein Programmteil, der sich bei Bedarf selbst wieder aufruft. Um beim Beispiel mit dem Durchforsten einer Festplatte zu bleiben: Bestimmte Dateien sollen bearbeitet werden, aber es muss in jedem Ordner nachgesehen werden, ob evtl. entsprechende Dateien darin sind.
In meinem Beispiel werden nach den Startroutinen zwei Handler verwendet. Der erste prüft nur, ob es sich um eine Datei oder einen Ordner handelt, der zweite bearbeitet Dateien.
Es wird also eine Liste mit Referenzen abgearbeitet. Jede einzelne Referenz wird im ersten Handler überprüft - handelt es sich um eine Datei, wird der zweite Handler aufgerufen und die Datei wird gleich bearbeitet. Handelt es sich um einen Ordner, ruft sich der erste Handler selbst wieder auf, übergibt sich dabei die aktuelle Referenz und schaut nun hier wieder nach, was alles Dateien bzw. was Ordner sind.
Zitat: | Und nich die letzte: Es gibt diesen Befehl mit dem ich einen Ordner auf das Script ziehen kann damit es startet, kann ich da auch z.B. die ganze festplatte oder einen User draufziehen? |
Dazu musst du einen 'on open' Handler deinem Skript hinzufügen und das Skript muss als Programm gespeichert werden. Wird es nur als kompiliertes Skript gespeichert, läuft es nicht selbstständig, sondern wird im Skripteditor geöffnet.
Dem 'on open' Handler wird eine Referenzliste übergeben. Dies geschieht, indem man ein oder mehrere Objekte auf das Programmsymbol zieht.
Diese Liste muss dann entsprechend abgearbeitet werden.
In meinem Artikel über rekursive Handler habe ich noch einen 'on run' Handler eingebaut. Der ist eigentlich immer da, auch wenn man es nicht extra so schreibt. Alles was sich in einem Skript auf oberster Ebene befindet, gehört zum 'run' Handler und wird ausgeführt, wenn man das Skript per Doppelklick oder aus dem Skripteditor heraus startet.
Ich beziehe mich hier übrigens immer nur auf das zweite, längere Beispiel in meinem Artikel.
Zurück zu deinem iTunes-Vorhaben.
Das Befehlsverzeichnis von iTunes wird dir wahrscheinlich nicht viel weiter helfen. Denn was nutzt es, Wörter aus einem Wörterbuch nachzulesen, wenn man nicht weiß, wie man sie aneinander reihen muss.
Deshalb ist es immer von Vorteil, wenn man bereits fertige Skripts studieren kann.
Ich empfehle dir hier das Skript 'addToLib' von Ken Barnt. Zu finden unter: http://www.malcolmadams.com/itunes/scripts/scripts07.php
Wenn du das Skript analysierst, wirst du feststellen, dass auch dort eine rekursive Routine verwendet wird. Allerdings fehlt in diesem Skript der 'on open' Handler und es funktioniert deshalb nicht als Droplet.
Viel Erfolg beim Scripten _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com |
|
Nach oben |
|
 |
originalhanno •-->

Anmeldedatum: 13.02.2004 Beiträge: 26 Wohnort: Graz
|
Verfasst am: 14.02.2004 - 19:46 Titel: Danke !!! |
|
|
Vielen Dank erstmal,
für die tolle und ausführliche Anleitung. Es liegt nicht jedem sich vorzustellen was andere für Probleme haben ( kleine Philosophische Ode)
Also ich werde jetzt erst noch ein bisschen E-Technik lernen und mich dann dransetzen dqass von Dir geschriebene von meinen grauen Zellen analysieren zu lassen.
Danke nochmal |
|
Nach oben |
|
 |
originalhanno •-->

Anmeldedatum: 13.02.2004 Beiträge: 26 Wohnort: Graz
|
Verfasst am: 15.02.2004 - 12:31 Titel: add wohin? |
|
|
Hi,
add to reference...
was ist die reference?
meine .xml Datei im Itunes Ordner? |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 15.02.2004 - 12:48 Titel: |
|
|
Hi Michael,
eine reference muss nicht gleich immer eine Pfadangabe zu einer Datei oder einem Ordner sein. Ich denke, dass in diesem Fall eher eine der Klassen library playlist oder playlist in Frage kommt.
Gruß _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com |
|
Nach oben |
|
 |
originalhanno •-->

Anmeldedatum: 13.02.2004 Beiträge: 26 Wohnort: Graz
|
Verfasst am: 15.02.2004 - 16:53 Titel: |
|
|
Hallo, ich bin jetzt zu diesem Programm gelangt:
tell application "Finder"
set mp3liste to every file of dieserOrdner whose name ends with "mp3"
end tell
tell application "iTunes"
add mp3liste to playlist "hanno"
end tell
dann bekomme ich diese Fehlermeldung:
„«class docf» "God Rest Ye Merry Gentlemen.mp3" of «class cfol» "applescripttest" of «class cfol» "michaelworobcuk" of «class cfol» "Users" of «class sdsk» of application "Finder"“ kann nicht in den erwarteten Typ umgewandelt werden.
Und nu?
Ich verstehe auch nicht was Klassen sind und wie man sie benutzt. |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 15.02.2004 - 17:49 Titel: |
|
|
Hallo Michael,
der Fehler kommt daher, dass wir bisher eine spezielle Form von Referenz verwendet haben - nämlich eine Finder-Referenz.
document file "Laberlaber.mp3" of folder "Quatsch" of folder "Benutzername" of folder "Users" of startup disk
Diese Form von Referenz versteht nur der Finder. Deine ursprüngliche Fragestellung zielte ja darauf ab, Dateien zu verschieben und da das Aufgabe des Finders ist, wären wir also auch soweit klar gekommen.
Der 'add'-Befehl aus iTunes erfordert jedoch 'a list of alias' - also eine Referenz in 'alias'-Form wie z.B.:
alias "Macintosh HD:Users:Benutzername:Quatsch:Laberlaber.mp3"
Die benötigte alias-Liste bekommst du unter OS X ganz einfach, indem du die entsprechende Zeile deines Skript so abänderst:
set mp3Liste to (every file of dieserOrdner whose name ends with ".mp3") as alias list
Dass iTunes hier gleich eine ganze Liste erwartet, macht uns die Arbeit schon leichter. Hätten wir nur einzelne Referenzen übergeben können, wäre es nötig gewesen die Liste in einer Schleife abzuarbeiten. Da iTunes aber unbedingt eine Liste haben will, können wir davon ausgehen, dass iTunes uns dann auch die viele Arbeit abnimmt.
Nun zu den Klassen:
Aufgrund der Pfadangaben in deinem ursprünglichen Beitrag gehe ich davon aus, dass du unter OS X arbeitest. Evtl. hast du aber noch den alten Skripteditor (AppleScript 1.9). Mit diesem werden die Befehlsverzeichnisse noch nicht so übersichtlich dargestellt wie mit dem Skripteditor 2.0 (der bei Panther dabei ist).
Du kannst dir den Skripteditor 2.0 (beta) auch herunterladen. Den entsprechenden Link findest du auf meiner Download-Seite.
Grund für die Skripteditor 2.0 Empfehlung:
Neben vielen Funktionen, die das Skripten erleichtern (Suchen/Ersetzen in Skripts usw.) werden auch die Befehlsverzeichnisse strukturierter dargestellt. Es erfolgt eine Aufteilung zwischen Suiten, Klassen (da wars wieder) und Befehlen.
Suiten: Grobe Kategorisierung der Klassen und Befehle.
Beispiel: Standard-Suite - enthält Klassen und Befehle, die eigentlich jedes Programm enthalten sollte
iTunes-Suite: Spezielle Klassen und Befehle des Programms iTunes
Internet-Suite: Hier finden wir in iTunes nur den Befehl 'open location'. Diese Suite kann natürlich nicht in allen Programmen vorkommen, würde auch of keinen Sinn machen, und ist aber auch keine spezielle Suite des Programms iTunes.
Klassen: Das sind praktisch die Objekte, die du ansprechen kannst.
Beispiele aus iTunes: application, browser window, track, playlist usw.
Befehle: Das ist das Vokabular, mit dem du die Klassen ansprechen kannst. Bsp: play, add, stop, convert usw.
Gruß _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com |
|
Nach oben |
|
 |
originalhanno •-->

Anmeldedatum: 13.02.2004 Beiträge: 26 Wohnort: Graz
|
Verfasst am: 15.02.2004 - 19:27 Titel: |
|
|
Also:
set dieserOrdner to alias "Festplatte:Users:michaelworobcuk:applescripttest:"
tell application "Finder"
set mp3liste to (every file of dieserOrdner whose name ends with ".mp3") as alias list
end tell
führt dann zu der Fehlermmeldung: alias "blbbalabl" lann nicht in class alst umgewandelt werden.
Ich benutze übrigens Panther.
Tja ich dachte die Sache währe relativ einfach.
Wie mann sich täuschen kann..... |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 15.02.2004 - 21:30 Titel: |
|
|
Das 'as alias list' sollte eigentlich noch in der selben Zeile stehen wie 'set mp3liste to ....' - Aber das hast du sicherlich erkannt und außerdem wäre dann eine andere Fehlermeldung gekommen.
Kopiere mal deinen Skripttext und sichere ihn irgendwo als Text. Dann starte den Skripteditor neu, lege ein neues Skript an und setze dort den Skripttext ein.
Irgendwas hakt da - aber am Skripttext selbst kann es nicht liegen. Das Skript muss so funktionieren (Hier läuft's schließlich auch).
Kommando zurück!
Ich kann den Fehler reproduzieren. Er tritt auf, wenn nur eine MP3-Datei im Ordner ist. Lösung folgt... bitte Geduld. _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 15.02.2004 - 21:59 Titel: |
|
|
Das ist ein Bug, der schon längere Zeit darauf wartet, endlich behoben zu werden.
Workaround:
tell application "Finder"
try
set mp3liste to ¬
(every file of dieserOrdner whose name ends with ".mp3") as alias list
on error
set mp3liste to ¬
(every file of dieserOrdner whose name ends with ".mp3") as alias as list
end try
end tell _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 15.02.2004 - 22:16 Titel: |
|
|
Noch exakter fängt man den Fehler so ab:
tell application "Finder"
set mp3liste to ¬
(every file of dieserOrdner whose name ends with ".mp3")
set tC to count of mp3liste -- Anzahl der Listenelemente ermitteln
if tC > 1 then
set mp3liste to mp3liste as alias list
else if tC = 1 then
set mp3liste to mp3liste as alias as list
else -- falls die Liste leer ist
display dialog "Der Ordner enthält keine MP3-Dateien" buttons {"OK"} default button 1 with icon stop giving up after 10
return -- beendet das Skript
end if
end tell
Hier wird auch berücksichtigt, dass der Ordner evtl. gar keine MP3-Dateien enthält. Dies würde im vorigen Workaround zum nächsten Fehler führen. _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com |
|
Nach oben |
|
 |
originalhanno •-->

Anmeldedatum: 13.02.2004 Beiträge: 26 Wohnort: Graz
|
Verfasst am: 15.02.2004 - 22:33 Titel: |
|
|
so langsam fang ich an die sache zu verstehen.
on open (dieserOrdner)
tell application "Finder"
set mp3liste to ¬
(every file of dieserOrdner whose name ends with ".mp3") as alias list
end tell
tell application "iTunes"
add mp3liste to playlist "hanno"
end tell
end open
ich habe jetzt sowas. Die Sache funktioniert super wenn ich den "on open" handler nicht einbaue, also "dieserOrdner" direkt festlege. Kann es daran liegen, dass bei dem "on open" kein alias mehr mitkommt? |
|
Nach oben |
|
 |
|