• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Variable an Terminal übergeben

Ansa42

Starking
Registriert
20.03.07
Beiträge
220
Mahlzeit,

vorweg: ich setze mich gerade zum ersten Mal mit AS auseinander, entschuldigt meine "Unwissenheit". Den Teil "leere den Papierkorb" überspringe ich jetzt mal ganz frech.

Der Plan ist folgender: Ich benutze häufig einen Online-Videorekorder. Die aufgezeichneten Files müssen nach dem Herunterladen dekodiert werden, dafür gibt es ein Tool, welches über das Terminal gesteuert wird.

Ich will jetzt einen Ordner basteln, an den ich ein AS anhänge, damit ich die heruntergeladenen FIles nur dort hineinverschiebe und der Rest soll von allein gehen (will z.B. nicht jedes Mal In- und Outputpfade, Benutzer und kennwort eintragen müssen).

Grundsätzlich komme ich halbwegs zurecht, habe aber zwei Fragen dazu:
1. Kann ich den Dateinamen der Datei, die ich in den Ordner kopiere, abfragen und an eine Variable übergeben? Wenn ja, wie? Im Moment muß ich diesen Teil noch manuell in einen Dialog eintragen (geht ja, aber automatisch wäre es schöner).

2. Am Ende meines Skriptes kommt jetzt der fertige String für das Dekodieren des Videofiles heraus (heißt momentan "verkettung").
"do shell script "verkettung"" funktioniert leider nicht - wie kriege ich den String ins Terminal? (http://developer.apple.com/technotes/tn2002/tn2065.html#TNTAG3 hat mir nicht so recht geholfen, oder ich bin zu blind)

Danke für jeden Hinweis!

EDIT: Punkt 2 hat sich erledigt, es muß wohl "tell application "Terminal" to do script verkettung" heißen.
 
Zuletzt bearbeitet:

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
1. Kann ich den Dateinamen der Datei, die ich in den Ordner kopiere, abfragen und an eine Variable übergeben?
Rechte Maustase im ScriptEditor -> Folder Action Scripts -> Adding

ergibt
Code:
on adding folder items to this_folder after receiving these_items
	-- insert actions here
end adding folder items to
"these_items" ist eine Liste der hinzugefügten Dateien. Im AppleScript Forum habe ich letztens das Gerüst für einen rekursiven Handler gepostet, den Du auch hier verwenden kannst.

2. Am Ende meines Skriptes kommt jetzt der fertige String für das Dekodieren des Videofiles heraus (heißt momentan "verkettung").
"do shell script "verkettung"" funktioniert leider nicht
Weil "Verkettung" kein Befehl ist. Zumindest keiner, der im Pfad liegt. Du müßtest wissen (wenn "verkettung" ein Kommando ist) wo es liegt und dann mit »do shell script "/pfad/verkettun"« aufrufen. Versuch mal als Pfad (wilde Vermutung) "./" zu nehmen.
 

Ansa42

Starking
Registriert
20.03.07
Beiträge
220
Danke soweit.
Nach mehreren erfolglosen Versuchen habe ich festgestellt, daß ich überhaupt keine Ordneraktion zum Fliegen kriege :-c, selbst

Code:
on adding folder items to this_folder after receiving these_items
	display dialog "Hallo!"
end adding folder items to
klappt nicht.

Was mache ich bloß falsch?

P.S.: Wenn ich per rechter Maustaste den Folder Action Handler (on adding...) einsetzen will bekomme ich immer die Fehlermeldung "Beim Ausführen des Skriptes ist ein Fehler aufgetreten", deshalb muß ich den Handler manuell eintragen. Ist mein AS evtl. kaputt?
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
Was da los ist, kann ich auch nicht sagen. Ferndiagnose ist etwas schwierig. Das AS selbst defekt ist glaube ich eher nicht.

Bekommst Du denn irgendwas zum Fliegen? Ich meine: Du kannst ja im Prinzip auch ein Droplet schreiben. Die empfangenen Datein dropst Du dann darauf. Sie werden verarbeitet und das Ergebnis landet (z.B.) auf dem Desktop.

Versuch das doch zuerst mal.
 

Ansa42

Starking
Registriert
20.03.07
Beiträge
220
habe gerade mal eine Standard-Folder-Action getestet (Alarm bei neuen Dateien - hat geklappt).

Mal sehen, werde das Alarmskript mal schrittweise anpassen und sehen, wo mein Fehler liegt.
 

Ansa42

Starking
Registriert
20.03.07
Beiträge
220
Das Problem war der Speicherort! Ich dachte, es ist egal, wo eine angehängte Aktion für einen Ordner liegt, sie muß aber zwingend in Lib/Scripts/Folder Actions liegen.
 

Ansa42

Starking
Registriert
20.03.07
Beiträge
220
Eine Frage habe ich noch:

Mein Ordner übergibt mir den Dateinamen "as text" jetzt in eine Variable, allerdings in Form von
Code:
HDD:Users:philip:Desktop:OTR-Dekoder:Dateiname_des_Files.mpg
, also den kompletten Pfad mit Doppelpunkten.

Ich benötige aber nur den Dateinamen. Ich sehe jetzt zwei Möglichkeiten, weiß aber nicht, wie ich sie realisiere:

1. Möglichkeit (die ich auch interessanter weil universeller finde): Kann man bestimmte Zeichen(-ketten) innerhalb einer Variablen durch etwas anderes (hier: nichts) ersetzen? Wie macht man das?

2. Möglichkeit: Der Inhalt der Variablen wird bis zum x. Buchstaben/Zeichen gelöscht (z.B. alles nach dem 30. Zeichen weiterverwenden - den Rest davor löschen).

Wie gesagt, es ist mein erster AS-Tag - vielleicht fehlt mir noch die richtige "Denke".
 

Hobbes_

Gast
Das geht ganz einfach. Siehe folgendes Beispiel-Script:

Code:
set txt to "HDD:Users:philip:Desktop:OTR-Dekoder:Dateiname_des_Files.mpg"

-- code
set my text item delimiters to ":"
set itemized_txt to every text item of txt
set filename to last item of itemized_txt
set my text item delimiters to ""
-- end of code

display dialog filename
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
Eine Frage habe ich noch:

Mein Ordner übergibt mir den Dateinamen "as text" jetzt in eine Variable,
Das geht noch einfacher.

Ich nehme an, Du hast da stehen:
Code:
set variable to irgendwas as text.

Mach daraus mal
Code:
set variable to name of (info for irgendwas)
 

Ansa42

Starking
Registriert
20.03.07
Beiträge
220
Das geht ganz einfach. Siehe folgendes Beispiel-Script:

Code:
set txt to "HDD:Users:philip:Desktop:OTR-Dekoder:Dateiname_des_Files.mpg"

-- code
set my text item delimiters to ":"
set itemized_txt to every text item of txt
set filename to last item of itemized_txt
set my text item delimiters to ""
-- end of code

display dialog filename

Das klappt gut, habe ich erstmal eingebaut, danke.


Das geht noch einfacher.

Ich nehme an, Du hast da stehen:
Code:
set variable to irgendwas as text.

Mach daraus mal
Code:
set variable to name of (info for irgendwas)

Im Moment sieht das ganze so aus:

Code:
on adding folder items to this_folder after receiving added_items
	try
		set Pfad to (added_items as text)
		set my text item delimiters to ":"
		set itemized_txt to every text item of Pfad
		set Dateiname to last item of itemized_txt
		set my text item delimiters to ""
		set Var1 to "/Applications/OTR/otrdecoder -i /Users/philip/Desktop/OTR-Dekoder/"
		set Var3 to " -o /Users/philip/Movies/Aufnahmen/ -e <Mailadresse> -p <Passwort>"
		set verkettung to Var1 & Dateiname & Var3
		tell application "Terminal" to do script verkettung
		display dialog "Die dekodierte Datei wird im Verzeichnis 'Aufnahmen' erstellt. Die Anwendung 'Terminal' darf erst beendet werden, wenn die Datei vollständig dekodiert wurde." buttons {"Fertig - Terminal beenden"} default button 1
		tell application "Terminal" to quit
	end try
end adding folder items to

Darf ich noch mehr fragen? Allmählich fängt es an, Spaß zu machen.

1. Wie kommt man auf solche Dinge wie "item delimiters"? Wo kann man sowas lesen? Fischer-Bayern? Allein hätte ich das nie gefunden.

2. Ich habe einen Button eingebaut, der nach abgeschlossener Dekodierung das Terminal schließt. Kann man irgendwie abfragen, ob das File im Zielordner fertig ist bzw. ob der Dekoder noch arbeitet (Idle Zustand?), damit das Schließen automatisch passiert?

3. Wenn alles fertig ist, soll das ursprüngliche File im Ordner "OTR-Dekoder" noch in den Papierkorb, aber das kriege ich hoffentlich selbst hin, trotzdem nehme ich natürlich gern Tips an.

4. Unter
Code:
set variable to name of (info for irgendwas)
kann ich mir noch nicht so recht was vorstellen :-c

5. Was macht eigentlich diese "Try"-Anweisung?

6. Vielen Dank für Eure Mühe und Geduld!
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
Mit "set Pfad to (added_items as text)" konvertierst Du schon alles nach Text. Das ist ungeschickt. Da ich mich aber jetzt um meinen Sohn kümmern muß, melde ich mich nach Mittag nochmal.
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
Ich habe das mal - zum Ausprobieren - als run handler geschrieben. Du kannst es also direkt im Scripteditor testen und Dir alle Schritte ansehen.

Es stehen ganz viele "return" Kommandos drin. Die mußt Du nach und nach weglöschen. Sie sollen Dir nur zeigen, was in jedem Schritt passiert.

Also: Starte und wähle mal mehrere Dateien aus.

Dann bekommst Du vom ersten "return" im Ergbnisfenster des Scripteditors angezeigt, was applescript durch die Wahl erhält. Das ist dasselbe, wie ein droplet oder ein folder action Handler erhält.

Wenn Du das gehehen hast, löscht Du die erste return Zeile und startest wieder. Du siehst dann, was an "info for" so ein gewähltes Element vorhanden ist. Lösche das return wieder usw. usf.

Code:
property otrdecoder : "/Applications/OTR/otrdecoder"
property output : (POSIX path of (path to "cusr")) & "Movies/Aufnahmen/"
property mail : "[email protected]"
property spasswort : "geh heim"

on run
	set added_items to choose file with multiple selections allowed
	return -- hier siehst Du, was alles im Script ankommt
	repeat with one_item in added_items
		set information to info for one_item
		return information -- hier, siehst Du alle Informationen über das erste der Files
		if not folder of information and name extension of information is "mov" then
			return Dateiname
			-- Allerdings brauchst Du den Namen doch gar nicht. Du hast doch den Pfad!
			return POSIX path of one_item
			set Command to otrdecoder & ¬
				" -i " & (quoted form of (POSIX path of one_item)) & ¬
				" -o " & (quoted form of output) & ¬
				" -e " & (quoted form of mail) & ¬
				" -p " & (quoted form of spasswort)
			return Command -- hier kannst Du das command begutachten
			do shell script Command
		end if
	end repeat
end run

P.S. »name extension of information is "mov"« mußt Du natürlich noch anpassen, da "mov" bestimmt nicht die richtige extension ist.
 

Ansa42

Starking
Registriert
20.03.07
Beiträge
220
Hui, das sieht in der Tat eleganter aus, als das, was ich gebastelt habe.

Ich werde mal versuchen, das soweit zu verstehen und aufzusaugen. Vielen Dank!