[GastForen Programmierung/Entwicklung AppleScript Dateien verschieben oder kopieren

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Dateien verschieben oder kopieren

Anonym
Beiträge gesamt: 22827

7. Feb 2005, 11:52
Beitrag # 1 von 7
Bewertung:
(3779 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo liebes Forum,

ich habe ein komplizertes Problem. (OS X 10.3.7)
Durch einen Anwenderfehler sind eine große Menge von Dateien (fast 50GB) in einen einzigen Ordner verschoben worden.
Jede Datei befindet sich in einem eigenen Unterordner, in dem sich ebenfalls eine Textdatei (ticket.jdf) befindet, in dem der Originalpfad des Dokumentes angegeben ist.
Das sieht in etwa so aus:
<File Tag="Main.Original">
                    file:///Macintosh HD/Users/ah/Desktop/filename.pdf
Kann ich mit Hilfe eines Applescripts den Pfad aus der Textdatei auslesen und die PDF-Datei wieder an die Originalstelle kopieren oder verschieben?
Ich bin beim Schreiben von Scripten ein ziemlicher Anfänger und für jede Hilfe dankbar.
Gruß
Andrea
X

Dateien verschieben oder kopieren

Hans Haesler
  
Beiträge gesamt: 5826

7. Feb 2005, 12:41
Beitrag # 2 von 7
Beitrag ID: #419312
Bewertung:
(3778 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo liebe Andrea,

wenn ich es richtig verstanden habe, dann sollten alle Unterordner (welche je die PDF-Datei
und die Textdatei enthalten), wieder in den ursprünglichen Ordner zurückverschoben werden.

Wenn in der Textdatei wirklich der Originalpfad der PDF-Datei eingetragen ist, dann sollte das
Zurückverschieben per Script machbar sein. Allerdings zeigt Dein Beispielpfad auf den Desktop
des Users "ah". Keine Spur von einem Ursprungsordner &#133;

Würdest Du mir bitte drei Textdateien zustellen. Und einen Screenshot (oder eine Beschreibung)
eines geöffneten Unterordners. Ich werde dann versuchen, ein Script zu entwickeln.

Gruss, Hans


als Antwort auf: [#419311]

Dateien verschieben oder kopieren

Hans Haesler
  
Beiträge gesamt: 5826

7. Feb 2005, 23:05
Beitrag # 3 von 7
Beitrag ID: #419313
Bewertung:
(3778 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Andrea,

wenn ich Deine Erklärungen (per private Mails) richtig verstanden habe, dann sind nicht "nur" &#150; wie
ursprünglich gepostet &#150; PDF-Dateien in ihre Herkunftsordner zurückzuverschieben, sondern auch Bild-
und Schriftdateien &#133; Ein schönes Schlamassel &#150; könnte man meinen.

Aber da sind zum Glück die ".jdf"-Dateien. Das sind XML-Files, in welchen für jede zu verschiebende
Datei der ursprüngliche Pfad gespeichert ist. Der Inhalt dieser Job-Ticket-Dateien ist aber leider
nicht nur eine einzelne Zeile, sondern besteht aus deren 32 &#133;

Mit einem XML-Utility könnte der Pfad leicht herausgelesen werden. Solch ein Tool habe ich aber nicht
zur Hand. Deshalb behelfe ich mir mit der Scripting Addition "Satimage.osax", mit welcher der String,
welcher uns interessiert, auch ausgezogen und zurechtgestutzt werden kann.

Das Droplet akzeptiert einen oder mehrere Ordner. Bei jedem Objekt, welches auf sein Icon fallengelassen
wurde, wird geprüft, ob der Pfad mit einem Doppelpunkt endet. Jeder Ordner enthält nur zwei Dateien.
Die zu verschiebende Datei und die Job-Ticket-Datei, welche immer "ticket.jdf" heisst. Deshalb ist die
Zuweisung der Namen einfach. Der Pfad zum JDF wird so bestimmt:
---
         set textFilePath to objectPath & "ticket.jdf"
---
Dieser Pfad wird zum Handler 'getPdfPath()' geschickt, die Datei wird in eine Variable gelesen und dank
RegEx- und Suchen-Ersetzen-Befehlen der Pfad der Herkunftsordner herausgepickt. Wenn dieser Pfad nicht
als leerer String zurückkommt, wird eine Liste des Ordnerinhalts erstellt: 'without invisibles', also
ohne eventuelle unsichtbare Dateien (wie "Icon" oder ".DS_Store").

Der Name der Bild- oder PDF- oder Was-auch-immer-Datei wird so in die Variable 'fileName' gesetzt ...
---
               if not (item i of fileList ends with ".jdf") then
                  set fileName to item i of fileList
               end if
---
... mit anderen Worten: Die erste Datei, deren Name nicht mit ".jdf" endet. Wenn dies Erfolg hat, dann
werden die Pfade der beiden Ordner und der Dateiname dem Handler 'movePDF()' übergeben, in welchem man
dem "Finder" sagt, er solle versuchen, die Datei in den Ursprungsordner zu verschieben. Wenn diese Aktion
gelingt, wird der gedroppte Ordner mit der Etikettenfarbe 6 eingefärbt, damit man eine optische Kontrolle
darüber hat, welche Ordner schon behandelt worden sind.
---
on open droppedObjects
   repeat with anObject in droppedObjects
      set objectPath to anObject as string
      if objectPath ends with ":" then
         set textFilePath to objectPath & "ticket.jdf"
         set origFolderPath to getPdfPath(textFilePath)
         if origFolderPath is not "" then
            set fileList to list folder objectPath without invisibles
            set fileName to ""
            repeat with i from 1 to count fileList
               if not (item i of fileList ends with ".jdf") then
                  set fileName to item i of fileList
               end if
            end repeat
            if fileName is not "" then
               movePDF(objectPath, fileName, origFolderPath)
            end if
         end if
      end if
   end repeat
end open

on getPdfPath(textFilePath)
   set origFolderPath to ""
   try
      set aString to read file textFilePath
      set aString to change (ASCII character 13) into "" in aString
      set aString to change (ASCII character 9) into "" in aString
      set filePath to (find text "<od:File Tag=\"Main.Original\">[ -z]+</od:File>" in aString with all occurrences, string result and regexp) as string
      set filePath to change "(<od:File Tag=\"Main.Original\">file:///)([!-z]+)(</od:File>)" into "\\2" in filePath with regexp
      set filePath to change "/" into ":" in filePath
      set AppleScript's text item delimiters to {":"}
      set origFolderPath to text items 1 thru -2 of filePath as string
      set AppleScript's text item delimiters to {""}
   end try
   return origFolderPath
end getPdfPath

on movePDF(objectPath, fileName, origFolderPath)
   try
      tell application "Finder" to move file fileName of folder objectPath to folder origFolderPath with replacing
      tell application "Finder" to set label index of folder objectPath to 6
   end try
end movePDF

---
Ich werde Dir das Droplet per Mail zustellen.

Gruss, Hans


als Antwort auf: [#419311]

Dateien verschieben oder kopieren

Anonym
Beiträge gesamt: 22827

8. Feb 2005, 09:12
Beitrag # 4 von 7
Beitrag ID: #419314
Bewertung:
(3778 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

vielen Dank für Deine Mühe! :D
Ich bin gespannt auf das Droplet. 

Herzliche Grüße
Andrea


als Antwort auf: [#419311]

Dateien verschieben oder kopieren

Hans Haesler
  
Beiträge gesamt: 5826

8. Feb 2005, 09:41
Beitrag # 5 von 7
Beitrag ID: #419315
Bewertung:
(3778 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Andrea,

ich habe jetzt den Handler, in welchem der Originalpfad ausgezogen wird, geändert. Die neue Version benötigt
die Scripting Addition "Satimage.osax" nicht mehr. Weil dieses Script bei einem Kunden eingesetzt werden soll,
ist es einfacher, wenn man ohne zusätzliche Hilfsmittel auskommt.

Hier ist der neue Handler:
---
on getPdfPath(textFilePath)
   set origFolderPath to ""
   try
      set aString to read file textFilePath
      repeat with i from 1 to count of paragraphs of aString
         if paragraph i of aString contains "<od:File Tag=\"Main.Original\">" then
            set curPara to paragraph (i + 1) of aString
            exit repeat
         end if
      end repeat
      repeat with i from 1 to count of curPara
         set curChar to character i of curPara
         if curChar is not tab then
            set filePath to text (i + 8) thru -2 of curPara
            exit repeat
         end if
      end repeat
      set AppleScript's text item delimiters to {"/"}
      set tmpPath to text items 1 thru -2 of filePath as list
      set AppleScript's text item delimiters to {":"}
      set origFolderPath to text items of tmpPath as string
      set AppleScript's text item delimiters to {""}
   end try
   return origFolderPath
end getPdfPath

---
Das Script liest die JDF-Datei in eine Variable. Dann geht es die Absätze durch. Sobald einer den Text
"<od:File Tag="Main.Original">" enthält, wird der nächste Absatz in eine neue Variable gegeben und die
Repeat-Schleife verlassen:
Code
<tab><tab><tab><tab><tab>file:///Macintosh HD/Ordner_1/Ordner_2/16%20datei%20namel%20xyz4.pdf<return> 

Die nächste Repeat-Schleife geht durch die Zeichen dieses Absatzes. Sobald ein Zeichen kein Tab mehr ist, werden
einer neuen Variable die Buchstaben (Wert des Zählers plus 8) bis zum vorletzten des Absatzes zugewiesen:
Code
Macintosh HD/Ordner_1/Ordner_2/16%20datei%20name%20xyz4.pdf 

Dann wird den 'AppleScript's text item delimiters' ein Bruchstrich zugewiesen. Damit können der Variablen
'tmpPath' die ersten drei Texteinheiten übergeben werden. Die vierte (der Dateiname) wird weggelassen:
Code
{"Macintosh HD", "Ordner_1", "Ordner_2"} 

Jetzt werden die 'text item delimiters' als Doppelpunkt festgelegt und die Elemente der Liste 'tmpPath' in die Variable
'origFolderPath' gegeben:
Code
"Macintosh HD:Ordner_1:Ordner_2" 

Die 'text item delimiters' werden wieder als leerer String definiert und der gefundene Pfad zum aufrufenden Handler
zurückgeschickt.

Und ich werde Dir jetzt das Droplet schicken und hoffe, dass die Dateien problemlos zurückverschoben werden können.

Gruss, Hans


als Antwort auf: [#419311]

Dateien verschieben oder kopieren

Anonym
Beiträge gesamt: 22827

10. Feb 2005, 20:21
Beitrag # 6 von 7
Beitrag ID: #419316
Bewertung:
(3778 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

sämtliche Dateien sind wieder am Originalplatz. Sie wurden zwar tatsächlich kopiert und nicht verschoben, aber das hat nicht wirklich gestört, da ausreichend Platz auf der Platte war.

Auch wenn ich mich wiederhole - Danke schön! ;-)

Herzliche Grüße
Andrea


als Antwort auf: [#419311]

Dateien verschieben oder kopieren

Hans Haesler
  
Beiträge gesamt: 5826

10. Feb 2005, 22:52
Beitrag # 7 von 7
Beitrag ID: #419317
Bewertung:
(3778 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Andrea,

bitteschön. Und danke für die Rückmeldung! Es freut mich, dass diese Aktion von Erfolg gekrönt war.

Übrigens: Die Dateien wurden kopiert, weil sich die Ursprungsordner nicht auf der selben Partition
wie die temporären Ordner befanden. Zum Glück ist der Finder in diesem Falle so nett, dass er den
'move'-Befehl ohne zu murren in 'duplicate' ändert.

Gruss, Hans


als Antwort auf: [#419311]
X