hilfdirselbst.ch
Facebook Twitter gamper-media
Mac OS X enthält verschiedene integrierte Werkzeuge und Technologien, mit denen sich gängige Aufgaben schnell und einfach automatisieren lassen.
Anonym
Beiträge: 22827
11. Okt 2003, 14:53
Beitrag #1 von 11
Bewertung:
(2445 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

auswahl erstellen + aktion


hallo!

noch eine frage!

wie kann ich mit einem applescript eine auswahl von dateien in einem ordner erstellen. es sollen nur die dateien mit einem bestimmten suffix ausgewaehlt werden. z.b. .qxd. diesen dateien moechte ich dann auch per AS automatisch verschieben. ordneraktion?

cu

hans-gerd claßen Top
 
X
Hans Haesler  M  p
Beiträge: 5453
11. Okt 2003, 21:17
Beitrag #2 von 11
Beitrag ID: #418339
Bewertung:
(2444 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

auswahl erstellen + aktion


Hallo Hans-Gerd,

was heisst "automatisch"? Welches ist das Kriterium zur Auslösung der "Aktion"?

Es ist in den meisten Fällen besser, wenn der Anwender den Anstoss gibt, indem er ein Script abspielt. Damit hat man eine bessere Kontrolle.

Im folgenden Script ist der Pfad zum Ordner, welcher ausgeräumt werden soll, eingetragen (eine Variante wäre, mit einem Dialog den Anwender den Ordner auswählen zu lassen). Der Zielordner ist ebenfalls im Script bestimmt.

Die Dateien müssen nicht ausgewählt werden. Das Verschieben kann auf einen Rutsch vorgenommen werden:
---
set aFolder to "Macintosh HD:"
set bFolder to "Macintosh HD:backup:"
try
  tell application "Finder" to move ¬
    (every item of folder aFolder whose name ends with ".qxd") to folder bFolder
end try
---

Hans Haesler <hsa@ringier.ch>
als Antwort auf: [#418338] Top
 
Anonym
Beiträge: 22827
12. Okt 2003, 00:19
Beitrag #3 von 11
Beitrag ID: #418340
Bewertung:
(2444 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

auswahl erstellen + aktion


aber jetzt:

on adding folder items to thisFolder after receiving itemList
 repeat with aFile in itemList
  tell application "Finder" to move &not;
   (every item of folder thisFolder whose name ends with ".xxx") to folder "tescht"
 end repeat
end adding folder items to

besten dank

hans gerd classen
als Antwort auf: [#418338] Top
 
Hans Haesler  M  p
Beiträge: 5453
12. Okt 2003, 09:07
Beitrag #4 von 11
Beitrag ID: #418341
Bewertung:
(2444 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

auswahl erstellen + aktion


Hallo Hans Gerd,

bitte sehr. Ja, Dein Script funktioniert. Aber &#133; die Repeatschleife ist überflüssig, weil die Dateien schon beim ersten Durchgang verschoben werden.
---
property bFolder : "Macintosh HD:backup:"

on adding folder items to thisFolder after receiving itemList
  tell application "Finder" to move &not;
    (every item of folder thisFolder whose name ends with ".qxd") to folder bFolder with replacing
end adding folder items to
---
Empfehlenswert ist, 'with replacing' anzuhängen. Damit wird vermieden, dass das Script "hängt", wenn sich eine gleichnamige Datei schon im Zielordner befindet.

Eine Variante: mit einer Repeat-Schleife die Liste der Dateien durchgehen, von jeder das Ende des Namens prüfen und dann verschieben.
---
property bFolder : "Macintosh HD:backup:"

on adding folder items to thisFolder after receiving itemList
  tell application "Finder" to activate
  repeat with aFile in itemList
    if (aFile as string) ends with ".qxd" then
      tell application "Finder" to duplicate file aFile to folder bFolder with replacing
    end if
  end repeat
end adding folder items to
---
Hier wird der Finder aktiviert. Der Verschiebungsvorgang wird dadurch beschleunigt.

Hans Haesler <hsa@ringier.ch>
als Antwort auf: [#418338] Top
 
Anonym
Beiträge: 22827
12. Okt 2003, 14:28
Beitrag #5 von 11
Beitrag ID: #418342
Bewertung:
(2444 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

auswahl erstellen + aktion


hallo hans!

dann nehme ich die nummer 2 mit der if-then-schleife, das wirkt eleganter ;-)

ein kleines problem habe ich mit dem property  folder.

property bFolder : "Macintosh HD:backup:" kann ich nicht benutzen, da ich mit einem alias "tescht alias" arbeite, dessen zielverzeichnis "tescht" auf einem anderen server liegt. es wuerde sich also wieder ein rel. pfad mit set subFolder anbieten:

on adding folder items to thisFolder after receiving itemList
 set subFolder to (thisFolder as string) & "tescht alias"
 tell application "Finder" to activate
 repeat with aFile in itemList
  if (aFile as string) ends with ".qxd" then
   tell application "Finder" to move file aFile to folder subFolder with replacing
  end if
 end repeat
end adding folder items to

da "tescht alias" aber ein alias ist, bekomme ich in dieser variante immer fehlermeldungen. apfelscript-hilfe sagt nun alias wie folder oder file behandeln; einfach bezeichnung austauschen. habe ich probiert, aber nicht die richtige syntax gefunden &#133;

nichts desto trotz: arbeite ich ohne property folder und gebe als zielverzeichnis einfach den alias direkt an, dann laeuft das script problemlos:

on adding folder items to thisFolder after receiving itemList
 tell application "Finder" to activate
 repeat with aFile in itemList
  if (aFile as string) ends with ".eps" then
   tell application "Finder" to move file aFile to folder "tescht alias" with replacing
  end if
 end repeat
end adding folder items to

ich habe mir jetzt mal eine "applescript-anleitung fuer absolute starter" irgendwo heruntergeladen und werde mich demnaechst sowieso eingehender mit as beschaeftigen. damit ich hier nicht weiter nerve!

so oder so

schoenen sonntag noch

hans gerd classen
als Antwort auf: [#418338] Top
 
Hans Haesler  M  p
Beiträge: 5453
12. Okt 2003, 21:02
Beitrag #6 von 11
Beitrag ID: #418343
Bewertung:
(2444 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

auswahl erstellen + aktion


Hallo Hans Gerd,

mein Ordner "backup" war nur als Beispiel gedacht, weil ich den Pfad zu Deinem "tescht" nicht kenne und weil ich trotzdem ein funktionierendes Beispiel präsentieren wollte. Damit die zwei oder drei interessierten Kollegen das Script ebenfalls ausprobieren können &#133; Du musst natürlich die Pfade auf Deine Umgebung abändern.

Die Zeile 'set subFolder to (thisFolder as string) & "tescht alias" ' kann nicht funktionieren, weil Du erstens ein Alias an einen String ankuppeln willst und zweitens müsste sich laut dieser Konstruktion der Ordner "tescht" in jenem Ordner befinden, an welchen die Ordneraktion angehängt ist.

Die Definition per 'property' hat den Vorteil, dass bei einer Änderung (oder zur Kontrolle) die Stelle schnell gefunden ist: zu Beginn des Scripts und nicht irgendwo vergraben. Auch bei eventuell mehreren Verweisen auf diesen Ordner muss der Pfad nur einmal bestimmt werden.

Natürlich funktioniert die "Live"-Angabe des Pfades im Finder-Befehl genau so gut.

Viel Spass beim AS-Lernen! Und bitte keine Hemmungen, um hier weitere Fragen zu stellen. Bisher war es anregend &#150; und kein Nerverei!

Hans Haesler <hsa@ringier.ch>
als Antwort auf: [#418338] Top
 
Anonym
Beiträge: 22827
13. Okt 2003, 10:26
Beitrag #7 von 11
Beitrag ID: #418344
Bewertung:
(2444 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

auswahl erstellen + aktion


hallo hans!

zitat:
mein Ordner "backup" war nur als Beispiel gedacht &#133;

das ist mir schon klar.

zitat:
Die Zeile 'set subFolder to (thisFolder as string) & "tescht alias" ' kann nicht funktionieren, weil Du erstens ein Alias an einen String ankuppeln willst und zweitens müsste sich laut dieser Konstruktion der Ordner "tescht" in jenem Ordner befinden, an welchen die Ordneraktion angehängt ist.

also: es befindet sich der <b>alias</b> zum ordner "tescht" tatsaechlich in dem ordner an den ich die aktion anhaenge. und in eben diesen alias kann ich nichts bewegen/verschieben. es waere mir wichtig hier mit dem alias arbeiten zu koennen, da die dateien in ein namentlich taeglich wechselndes verzeichnis auf einem anderen server verschoben werden sollen.


etwas anderes:
ich habe dem photoshopscript in dem aktionen abgespielt werden eine unterscheidung in zwei verschiedene strings (?) hinzugefuegt, die jeweils eine aktion fuer die farbbild- und sw-bildbearbeitung aufrufen. das funktioniert auch einwandfrei. meine frage nur: kann man die abfrage in eine einzige if then-schleife packen?

- - - - -

if (aFile as string) contains "4c" then
   tell application "Adobe Photoshop 7.0" to do script "farbe"
  end if
  if (aFile as string) does not contain "4c" then
   tell application "Adobe Photoshop 7.0" to do script "sw"
  end if

- - - - -

cu


hans-gerd classen
als Antwort auf: [#418338] Top
 
Hans Haesler  M  p
Beiträge: 5453
13. Okt 2003, 16:23
Beitrag #8 von 11
Beitrag ID: #418345
Bewertung:
(2444 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

auswahl erstellen + aktion


Hallo Hans-Gerd,

ach sooo &#133; jetzt blicke ich endlich durch. Entschuldige bitte, dass ich so "dicht" war.

Ich nehme an, dass Dir eine Lösung in welcher der Name des Aliases keine Rolle spielt, willkommen ist. Bedingung ist, dass sich stets nur ein Alias im Ordner befindet.

Im Script sind verschiedene Sicherungen eingebaut. Zuerst wird die Variable 'backupFolder' initialisiert und auf einen leeren String gesetzt. Dann wird versucht, über den Finder eine Liste der Aliase zu bekommen und dann mit 'original item' das Original des ersten Aliases der Liste.

Wenn die Variable 'backupFolder' kein leerer String mehr ist, dann waren die vorangegangenen zwei Befehle erfolgreich und das Script fährt weiter, indem es prüft, ob das Original ein Ordner ist (endet der Pfad mit ":"?). Wenn ja, wird zur schon bekannten Repeat-Schleife übergegangen.
---
on adding folder items to thisFolder after receiving itemList
  set backupFolder to ""
  try
    tell application "Finder" to set aliasList to thisFolder's alias files
    tell application "Finder" to set backupFolder to original item of item 1 of aliasList
  end try
  if backupFolder is not "" then
    if (backupFolder as string) ends with ":" then
      repeat with aFile in itemList
        if (aFile as string) ends with ".qxd" then
          tell application "Finder" to move file aFile to backupFolder with replacing
        end if
      end repeat
    end if
  end if
end adding folder items to
---

Die Lösung für die if-then-Schleife habe ich in ein separates Thema gesetzt.

Hans Haesler <hsa@ringier.ch>
als Antwort auf: [#418338] Top
 
Anonym
Beiträge: 22827
13. Okt 2003, 18:32
Beitrag #9 von 11
Beitrag ID: #418346
Bewertung:
(2444 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

auswahl erstellen + aktion


hallo hans!

das der pfad zum ordner aus einer liste der aliase ausgelesen wird und ich somit die scriptpfade nie haendisch aendern muss ist wirklich mehr als praxistauglich!!! vielen dank fuer's mitdenken!!

cu & besten dank

hans-gerd classsen
als Antwort auf: [#418338] Top
 
Hans Haesler  M  p
Beiträge: 5453
13. Okt 2003, 22:07
Beitrag #10 von 11
Beitrag ID: #418347
Bewertung:
(2444 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

auswahl erstellen + aktion


Hallo Hans-Gerd,

bitte sehr.

Aber ich wiederhole meine Warnung: es darf sich nie mehr als ein Alias im überwachten Ordner befinden. Und es muss immer mit dem Zielordner übereinstimmen.

Zur Sicherheit könnte man die Kontrollen erweitern: Ist ein Alias vorhanden? Wenn ja, kann das Original lokalisiert werden? Ist mehr als sein Alias vorhanden? Dies alles ist in eine 'if-else if'-Konstruktion gepackt. Wenn ein Problem auftaucht, dann zeigt es ein Dialog an und das Script wird mit 'error number -128' beendet (der gleiche Error-Code wird generiert, wenn der Anwender auf die Buttons "Abbruch" oder "Abbrechen" klickt). Ausnahmsweise steht hier am Ende der Tests kein 'else', weil ich ziemlich sicher bin, dass alle Möglichkeiten abgedeckt werden.

Bevor das Script die Repeat-Schleife freigibt, wird noch untersucht, ob das Alias auf einen Ordner zielt.
---
on adding folder items to thisFolder after receiving itemList
  tell application "Finder" to set aliasList to thisFolder's alias files
  if (count of aliasList) = 0 then
    display dialog "Der Ordner
&raquo;" & thisFolder & "&laquo;
enthält kein Alias.

Bitte zuerst eines herstellen." buttons "OK" default button 1 with icon 0
    error number -128
  else if (count of aliasList) = 1 then
    try
      tell application "Finder" to set backupFolder to original item of item 1 of aliasList
    on error
      display dialog "Das Original des Aliases
&raquo;" & (item 1 of aliasList as string) & "&laquo;
kann nicht gefunden werden." buttons "OK" default button 1 with icon 2
      error number -128
    end try
  else if (count of aliasList) > 1 then
    display dialog "Der Ordner
&raquo;" & thisFolder & "&laquo;
enthält mehr als ein Alias.

Bitte zuerst aufräumen." buttons "OK" default button 1 with icon 0
    error number -128
  end if
  if (backupFolder as string) does not end with ":" then
    display dialog "Das Alias im Ordner
&raquo;" & thisFolder & "&laquo;
stammt von einer Datei.

Bitte zuerst korrigieren." buttons "OK" default button 1 with icon 0
    error number -128
  end if
  repeat with aFile in itemList
    if (aFile as string) ends with ".qxd" then
      try
        tell application "Finder" to move file aFile to backupFolder with replacing
      end try
    end if
  end repeat
end adding folder items to
---
Der Dialog wird schon aufmucken wenn Du (bei geöffnetem Ordner) ein zweites oder ein ungültiges Alias darin erzeugst.

Hans Haesler <hsa@ringier.ch>
als Antwort auf: [#418338] Top
 
Anonym
Beiträge: 22827
14. Okt 2003, 13:55
Beitrag #11 von 11
Beitrag ID: #418348
Bewertung:
(2444 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

auswahl erstellen + aktion


hallo hans!

funktioniert ohne fehl und tadel!!!

besten dank

hans-gerd classen
als Antwort auf: [#418338] Top
 
X