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

Anmeldedatum: 20.02.2008 Beiträge: 12
|
Verfasst am: 18.05.2016 - 12:54 Titel: Dateien in unsichtbaren Ordner verschieben |
|
|
Hallo,
ich möchte im Finder ausgewählte Dateien in einen vorher definierten Ordner verschieben. Das geht auch solange, bis ich als Ziel einen Ordner angebe, der mit einem Punkt im Dateinamen beginnt (der also im Finder ein unsichtbarer Ordner ist).
So funktioniert es:
Code: | tell application "Finder"
set dateien to selection
set ordner to folder "Macintosh HD:Users:Username:Desktop:Ziel:"
move dateien to ordner without replacing
end tell |
Und so nicht:
Code: | tell application "Finder"
set dateien to selection
set ordner to folder "Macintosh HD:Users:Username:Desktop:.Ziel::"
move dateien to ordner without replacing
end tell |
Ich bekomme dann den Skriptfehler:
Zitat: | „Finder“ hat einen Fehler erhalten: „folder "Macintosh HD:Users:Username:Desktop:.Ziel:"“ kann nicht gelesen werden. |
Was mache ich falsch?
Respektive, wie kriege ich das mit dem Anfangspunkt im Dateinamen geregelt?
EDIT: Es liegt wohl am Finder. Der hat Probleme mit unsichtbaren Ordnern, solange sie im Finder tatsächlich unsichtbar sind. Die Lösung soll "System Events" sein (für den move-Befehl). Das scheitert bei mir aber ebenso.
Hilft der Hinweis mit System Events?
Zuletzt bearbeitet von babaloo am 18.05.2016 - 14:00, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
babaloo •->

Anmeldedatum: 20.02.2008 Beiträge: 12
|
Verfasst am: 18.05.2016 - 13:53 Titel: |
|
|
Ein weiterer Versuch mit shell script scheitert ebenso.
Code: | tell application "Finder"
set dateien to selection
set quelle to (POSIX path of (selection as alias))
set ordner to "~/Desktop/.Ziel"
repeat with i in dateien
do shell script "mv" & space & quoted form of POSIX path of quelle & space & ordner
end repeat
end tell |
Es funktioniert zwar, allerdings nur bei Finderauswahl einer einzelnen Datei. Sind mehrere Dateien ausgewählt erscheint der Skriptfehler
Zitat: | {alias "Pfad:zu:Datei1", alias "Pfad:zu:Datei2"} kann nicht in Typ alias umgewandelt werden. |
Irgendeine Idee?
PS: falls noch nicht bemerkt, ich bin blutiger Anfänger in Sachen AppleScript.  |
|
Nach oben |
|
 |
babaloo •->

Anmeldedatum: 20.02.2008 Beiträge: 12
|
Verfasst am: 18.05.2016 - 15:22 Titel: |
|
|
Lösung: string statt alias
Code: | tell application "Finder"
set dateien to selection
set ordner to "~/Desktop/.Ziel"
repeat with i in dateien
set quelle to (POSIX path of (i as string))
do shell script "mv" & space & quoted form of POSIX path of quelle & space & ordner
end repeat
end tell |
Funktioniert für eine wie für mehrere Dateien und auch mit einem unsichtbaren Ordner als Ziel.
Sollte das noch irgendwie eleganter gehen, dann nehme ich gerne Anregungen auf. |
|
Nach oben |
|
 |
Lösung_Monitor_Auflös_App •-->

Anmeldedatum: 25.01.2016 Beiträge: 53
|
Verfasst am: 23.05.2016 - 09:22 Titel: |
|
|
Wenn ich das letzte hier gepostete Skript laufen lasse resultiert folgende Fehlermeldung hat Folgendes geschrieben: | „Finder“ hat einen Fehler erhalten: mv: rename /Users/HD/Desktop/Ausgewählte files/ to /Users/HD/Desktop/.Ziel: Not a directory |
|
|
Nach oben |
|
 |
babaloo •->

Anmeldedatum: 20.02.2008 Beiträge: 12
|
Verfasst am: 25.05.2016 - 02:24 Titel: |
|
|
Existiert bei dir denn ein Ordner namens ".Ziel" auf deinem Schreibtisch? Der muss nämlich schon da sein. Ansonsten benennt das Skript die Datei einfach nur um in ".Ziel". Wenn es mehrere Dateien sind, überschreibt das Skript sie solange, bis die letzte Datei kopiert/bewegt ist.
Sprich, wenn der unsichtbare Ordner .Ziel bei dir nicht von Anfang an da war, hast du nun eine unsichtbare Datei namens .Ziel auf dem Schreibtisch. Und diese Datei hat den Inhalt der zuletzt bewegten Datei. |
|
Nach oben |
|
 |
Skeeve •---->


Anmeldedatum: 20.04.2006 Beiträge: 1068
|
Verfasst am: 29.05.2016 - 13:29 Titel: |
|
|
Um den Fehler, daß bei nicht-existenten Ordner .Ziel die Dateien in .Ziel umbenannt werden, zu vermeiden, bietet es sich in unixoiden Betriebssystemen an, einen "/" anzuhängen. Also in Deinem Script nicht
Code: | set ordner to "~/Desktop/.Ziel" |
sondern
Code: | set ordner to "~/Desktop/.Ziel/" |
_________________ "All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies") |
|
Nach oben |
|
 |
babaloo •->

Anmeldedatum: 20.02.2008 Beiträge: 12
|
Verfasst am: 30.05.2016 - 21:35 Titel: |
|
|
Danke, Skeeve. Für mich und für dieses Skript nicht so relevant, da ich den Ordner ja vorher angelegt hatte.
Aber für andere und für mich bei zukünftigen Projekten ein willkommener Hinweis. Danke nochmal! |
|
Nach oben |
|
 |
Wolle-77 •--->


Anmeldedatum: 25.02.2003 Beiträge: 448 Wohnort: Geldern
|
Verfasst am: 30.05.2016 - 23:40 Titel: |
|
|
Wenn hier schon noch Leben im Thread ist, dann möchte ich doch auch noch einen wichtigen Hinweis geben (an babaloo)
Du solltest darauf achten bzw. bedenken, an welchen Prozeß Du Events sendest (die Grundlage von AppleScript – AppleEvents werden empfangen und gesendet).
In Deinem Fall hast Du das so stehen:
tell app "Finder"
…
end tell
Das heißt, alles wird über den Finder abgewickelt. Das funktioniert zwar, aber das wäre so, als wenn Du im Büro einem Mitarbeiter sagst, "Sag dem mal bescheid, der soll für mich was machen". Das funktioniert auch, aber es ist langsamer und unperformanter.
Daher: Das einzige, was der Finder machen muß, ist Dir die selection liefern.
Code: | tell app "Finder" to set dateien to selection |
Der Rest des Scriptes verwendet die Standard Bibliotheken und braucht den Finder somit nicht mehr.
Wenn Du das testest in einer Schleife mit einigen hunderten Durchgängen, wirst Du (oder auch bei aufwendigeren Scripten) schnell Laufzeitoptimierungen von mehreren Sekunden bis Minuten feststellen können.
Ich weiß gar nicht mehr wann, aber irgendwann hat Apple AppleScript mal optimiert und seitdem ist das unbedingt zu beachten.
Und dann wird unser Experte hier etwas weiter oben (…) auch nicht mehr die Meldung bekommen "Finder hat einen Fehler erhalten", sondern eben "Es ist ein Fehler aufgetreten" – wenn der zweite Mitarbeiter als Ziel, der angesprochen wurde, etwas zu tun etwas nicht kann, dann sagt der eben nicht direkt dem Chef bescheid, sonden würde dann auch umständlich wieder dem ersten Mitarbeiter sagen "sag mal, daß ich das zur Zeit nicht kann" …
 _________________ Martin Wolter
--
Apple rocks the planet! |
|
Nach oben |
|
 |
babaloo •->

Anmeldedatum: 20.02.2008 Beiträge: 12
|
Verfasst am: 31.05.2016 - 09:45 Titel: |
|
|
Sehr guter Hinweis, Wolle-77! Danke!!
Ich mache nur seeehr wenig mit AppleScript, habe die Sprache nie gelernt und schustere mir meine kleinen Skripte irgendwie zusammen. Aber alles, was mein Verständnis erweitert, ist herzlich willkommen. |
|
Nach oben |
|
 |
|