Bereiche
News
Rewind
Tipps & Berichte
Forum
Galerie
Journals
Events
Umfragen
Themenwoche
Kleinanzeigen
Interaktiv
Anmelden
Registrierung
Zu allen empfangenen Nachrichten
Suche...
Zur erweiterten Suche
Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum
>
Software
>
Dokumente in PDFs umwandeln
Dokumente in PDFs umwandeln
hidalgo
01.08.17
10:30
Wie der Titel schon sagt, möchte ich Dokumente, in meinem Fall alte Mellel-Dokumente in PDFs umwandeln. Ich habe ungefähr 3000 alte Dokumente in einer Ordnerstruktur, die ich umwandeln möchte, da ich Mellel nicht mehr verwende aber sicherstellen möchte, dass ich zukünftig auf die Dokumente zugreifen kann, auch wenn Mellel dereinst nicht mehr auf dem Computer installiert bzw. laufen wird.
Am liebsten wäre mir eine Service-Lösung, die mittels Rechtsklick auf die Datei diese an Ort umwandelt. Wer kann mir da helfen?
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
Kommentare
1
2
>|
jensche
01.08.17
11:55
Ich denke Automator wird das easy lösen können:
Hast du Acrobat Pro? dann ists noch einfacher.
Hilfreich?
0
Kuziflu
01.08.17
12:07
jensche
Die Idee hatte ich auch. Wird aber nur funktionieren wenn Mellel seinen Beitrag dazu leistet und das Abrufen von Dokumenten durch Automator unterstützt.
Hilfreich?
0
hidalgo
01.08.17
13:46
jensche
Ich denke Automator wird das easy lösen können:
Hast du Acrobat Pro? dann ists noch einfacher.
Wahrscheinlich stehe ich irgendwie auf dem Schlauch. Wie hilft dein Link mein Problem zu lösen?
Ja, Acrobat Pro hätte ich.
Aber ich will ja nicht 3000 Dokumente händisch öffnen und als PDF abspeichern sondern gerade das Automator überlassen.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
subjore
01.08.17
14:14
Mit Automator kann man Arbeitsprozesse anlegen, die dann automatisch für eine Datei ausgeführt werden können. Man legt einmal händisch an Dokument in dem und dem Programm lösen und die Datei in dem Dateiformat exportieren. Diesen Arbeitsablauf kann man dann schnell auf alle Dateien anwenden.
Hilfreich?
0
Kuziflu
01.08.17
17:32
hidalgo
Wenn du Acrobat zur Hand hast fallen mir adhoc die Stichworte Aktionsassistent und Hot-Folder ein.
Gerade wenn du gelegentlich eine größere Anzahl an Dateien konvertieren willst wäre der Aktionsassistent die erste Wahl.
Wenn du die PDFs für lange Zeit archivieren willst, mach PDF/As draus.
Hilfreich?
+1
Kuziflu
01.08.17
17:53
Hab dir eine entsprechende Aktion erstellt, die du unter dem folgenden Link downloaden kannst.
Bevor du die Aktion startest leg einen Ordner mit den Namen "konvertieren in PDF/A" am Desktop an. Aus diesem holt sich Acrobat die Dateien und konvertiert sie in PDF/As. Die PDFs erhalten den Präfix "konv_" und werden in selbigen Ordner abgelegt.
Da ich kein Mellel habe, hab ich die Aktion mit Word-Dateien getestet. Sollte aber laufen, insofern Acrobat auch Mellel unterstützt.
https://we.tl/AbHlFHOVY2
Hilfreich?
0
hidalgo
01.08.17
18:47
@Kuziflu
Erstmal vielen Dank. Werde das ausprobieren, wenn ich keine bessere Lösung finde. Das Problem mit dem Hotfolder ist ja, dass ich jede der 3000 Dateien aus der Ordnerstruktur nehmen muss, in den Hotfolder packen und dann die PDFs wieder in der Ordnerstruktur verteilen muss. Das schreckt mich etwas ab.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
Kuziflu
01.08.17
19:53
hidalgo
Du könntest die Aktion bearbeiten und als Quelle jeden beliebigen Ordner wählen. Auch mehrere Ordner auf einmal können angegeben werden. Ob Unterordner mit einbezogen werden müsstest du vorab testen.
Hilfreich?
0
MikeMuc
01.08.17
20:19
Gesucht ist wohl eher eine Aktion oder Script welches einen Ordner und alle Unterordner nach edel-Dateien durchsucht und neben eine Quelldatei das PDF legt.
Scripte, die sich "durch die Ordner" hangeln, finden sich sicher im Internet. So eines müßte man dann entsprechend anpassen auf das es die Funde entsprechend konvertiert.
Hilfreich?
0
tranquillity
01.08.17
23:32
Man könnte über die Suchfunktion im Finder quasi einen virtuellen Ordner erhalten, der alle gewünschten Dokumente erhält (anzeigt). Diese dann einfach in den Hotfolder kopieren (mit Auswahl-Taste, damit sie am Originalort bleiben. Sollte doch klappen.
Hilfreich?
0
hidalgo
02.08.17
00:23
@MikeMuc
Genau. Leider habe ich bis jetzt nichts Brauchbares im Internet gefunden, wohl auch weil Mellel nicht AppleScript-fähig ist.
@tranquillity
Ja, klar, klappt das. Aber wie verteile ich die neuen PDFs dann wieder in die entsprechenden Ordner?
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
zolondek
02.08.17
05:59
@hidalgo
eigentlich bräuchte man doch nur über die rechte Maustaste die Dienste aufrufen und das netterweise von Kuziflu erstellet Script ansteuern.
Die Dateien also alle an ihrem Platz lassen.
Es gibt dort unter Dienste doch einen Unterpunkt: Applescript ausführen...
oder ?
Hilfreich?
0
Kuziflu
02.08.17
11:02
Ich sollte mal klarstellen, dass ich kein AppleScript, keinen Automator-Dienst und auch keinen Hot-Folder hochgeladen hab. Das ist eine Acrobat Aktion. Diese wird manuell über Acrobat gestartet und wandelt Dateien um die an einem bestimmten Ort liegen.
tranquillity
Man könnte über die Suchfunktion im Finder quasi einen virtuellen Ordner erhalten, …
Acrobat kann auf gespeicherte Suchabfragen wie du sie meinst leider nicht zugreifen.
hidalgo
@tranquillity
Ja, klar, klappt das. Aber wie verteile ich die neuen PDFs dann wieder in die entsprechenden Ordner?
Die Acrobat Aktion legt sie wieder im selben Ordner ab.
Unterordner werden übrigens berücksichtigt. Wenn deine Dateien also in einer Ordnerstruktur abgelegt sind, die nur wenige übergeordnete Ordner umfasst, brauchst du die Aktion nur ein paar mal starten. Bzw. kann man auch mehrere Ordner gleichzeitig zur Verarbeitung angeben.
Hilfreich?
0
hidalgo
02.08.17
11:06
@ Kuziflu
Super, vielen Dank. Mit welcher Acrobat-Version hast du die Aktion angelegt? Ich habe eine alte Version (CS6) und damit geht es nicht. Muss mir wohl eine aktuelle Testversion besorgen
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
Hakke
02.08.17
11:43
Dieses Tool kann das, was du willst, jedoch weiß ich nicht, ob das Dateiformat von Mellel unterstützt wird. Hier gibts eine Demo:
http://rootrisetech.com/product/pdftor
Hilfreich?
0
MikeMuc
02.08.17
11:46
hidalgo
@MikeMuc
Genau. Leider habe ich bis jetzt nichts Brauchbares im Internet gefunden, wohl auch weil Mellel nicht AppleScript-fähig ist.
dann hast du falsch gesucht
Wenn ich nach "applescript rekursive folders" bei google suche dann finde ich den 2. Treffer schon mal als guten Ansatz um rekursiv durch die Ordner zu wandern.
Aber leider hast du recht, Helle ist tatsächlich nicht scriptfähig
Aber dieses Minscript öffnet die zuvor ausgewählte Datei schon mal in Mellel:
set x to choose file
tell application "Finder"
open x
end tell
Den Export als PDF müßte man dann mit ein wenig UI-Scripting (so in der Art: Select Menu Export-PDF... Presse return, Select Menu Close Window) trotzdem hinbekommen.
Vielleicht hilft auch einfach mal die Suche nach "applescript mellel export as pdf". Die Trefferliste zeigt mir das du nicht der Erste bist mit diesem Problem.
Den Rest der Lösung mußt du nun selber raus finden
Hilfreich?
0
hidalgo
02.08.17
13:39
@ Kuziflu
Leider funktioniert die Acrobat-Aktion nicht mit Mellel.
@Hakke
Auch dein Vorschlag funktioniert nicht mit Mellel-Dokumenten
@MikeMuc
Es nützt herzlich wenig, wenn ich Mellel via AppleScript öffnen, Mellel selber aber nicht steuern kann.
Ich habe eine ältere Mellel-Version, die keine PDFs exportieren kann. Und ja, ich bin nicht der Einzige mit dem Problem. Google findet viele Treffer, die das Problem schildern, aber keinen, der eine Lösung hätte.
UI-Scripting fällt auch aus, da ich dann über die Druckfunktion PDFs erzeugen und für jedes PDF einen eigenen Speicherort angeben müsste. Dann kann ich das auch 3000 Mal von Hand machen.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
MikeMuc
02.08.17
14:04
hidalgo
@MikeMuc
Es nützt herzlich wenig, wenn ich Mellel via AppleScript öffnen, Mellel selber aber nicht steuern kann.
Nein, das ist die erste Voraussetzung damit du dann weiterarbeiten kannst. Nur wenn das Dokument in Mellel offen ist kann man per UI-Scripting weiter arbeiten.
hidalgo
UI-Scripting fällt auch aus, da ich dann über die Druckfunktion PDFs erzeugen und für jedes PDF einen eigenen Speicherort angeben müsste. Dann kann ich das auch 3000 Mal von Hand machen.
Warum fällt UI-Scripting über die Druckfunktion deshalb aus? Ist halt ein wenig mühsam aber sollte machbar sein.
Vielleicht reicht es aber auch schon, die Dateien als Word oder RTF-Dateien zu exportieren. Die kann man dann ja weiter verarbeiten. Wobei beides ja auch schon recht "universell" ist
Hilfreich?
0
hidalgo
02.08.17
14:09
@MikeMuc
Ist es denn nicht notwendig, beim Drucken als PDF den Speicherort anzugeben? Wie mache ich das beim UI-Scripting?
Export als Word-Dokument geht zwar, ist aber unbrauchbar, da das Layout zerstört wird.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
hidalgo
02.08.17
16:03
@MikeMuc
Nach anfänglicher Skepsis bin ich jetzt der Meinung, dass das mit deiner Methode zu schaffen ist.
@alle
Vielen Dank für die vielen Tipps.
Wie geht es jetzt weiter? Bis jetzt habe ich diesen Skript gebastelt.
tell application "Mellel"
activate
end tell
tell application "System Events"
tell process "Mellel"
tell menu bar 1
tell menu "Ablage"
click menu item "Drucken …"
end tell
end tell
tell sheet 1 of window 1
tell menu button "PDF"
click
pick menu item "Als PDF sichern …" of menu 1
end tell
end tell
return UI elements of sheet 1 of sheet 1 of window 1
end tell
end tell
Was jetzt fehlt ist das rekursive Öffnen der betreffenden Dateien (oder kann AppleScript mit einem intelligenten Ordner etwas anfangen) und das Speichern neben der Ursprungsdatei. Der Script müsste also den Pfad zur Datei in eine Variable schreiben und diese Variable beim Speichern wieder einsetzen.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
hidalgo
02.08.17
21:50
Habe jetzt noch zwei interessante Skripte gefunden
Das Erste ist ideal, wenn man eine Finder-Auswahl (Smart Folder funktionieren) an Word- und PowerPoint-Dateien in PDF umwandeln will.
Das Zweite öffnet Dateien eines bestimmten Typs durch mehrere Ordnerhierarchien hindurch.
Ich könnte mit beiden Abläufen leben. Mir ist einfach nicht klar, wie ich das mit meinem Skript kombinieren kann.
Vielen Dank für weitere Tipps und Hilfestellungen.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
MikeMuc
02.08.17
23:31
Ich hatte dir doch oben schon die Stichworte zur rekursiven Suche gegeben.
Ich würde daher hier https://stackoverflow.com/questions/37149499/applescript-recursively-searching-through-directories und hier mal schauen ob das was taugt.
Ich hab das zwar nicht selber getestet der ich denke das ist ein Anfang. Du bekommst dort sowohl den Pfad zur jeweiligen Datei als auch den Namen.
Deine ersten 3 Zeilen kannst du sparen und die Zeile mit dem return ebenfalls.
Dafür das ganze on eine Funktion mit
on myPrint(thePath, theName)
....
end
verpacken und aus dem rekursiven Scriptteil aufrufen.
Wobei ich gesteh das es etwas knifflig sein wird den richtigen Zielordner über UI-Scripting zu setzen.
Mal als Idee: immer an den selben Ort "drucken" und das Ergebnis nachträglich per Script an die richtige Stelle verschieben (Stichwort der Suche "applescript Finder move file" oder so.
Ansonsten hast du das mit dem UI-Scripting schon ganz gut hin bekommen. Da wirst du den Rest auch schon schaffen. Ggf. einfach in letzter Forum mal anmelden und um Hilfe der richtigen Profis bitten. Wenn du dort mit deinem bisherigen Versuchen nachfragst dann bin ich mir sicher das du am Ende mit einem perfekten Script dastehen wirst.
Hilfreich?
0
hidalgo
03.08.17
00:11
Vielen Dank für die Blumen.
Leider habe ich keine Ahnung, wie ich
Dafür das ganze on eine Funktion mit
on myPrint(thePath, theName)
....
end
verpacken und aus dem rekursiven Scriptteil aufrufen.
anpacken soll. Mir fehlt einfach echtes Wissen um AppleScript und habe nicht die Kapazitäten, mich da gross reinzuknien.
Deine verlinkten Beispiele kann ich einfach nicht einordnen, bzw. ich weiss nicht, wie ich das auf meine Anwendung adaptieren kann.
Meine beiden Links (von oben) hätten eigentlich alle Elemente, wenn man nur wüsste, wie sie zusammenfügen.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
MikeMuc
03.08.17
10:13
Hallo hidalgo,
in deinem 2. Link ist doch alles drin. Auch wie man eine Funktion erstellen (on FName ... end).
Hier mal alles zusammen kopiert und am Stück, aber ungetestet. Einzig der Teil mit der Verschiebung des gerade erstellten PDFs ist noch offen.
Wenn du jetzt nicht weiter kommt dann melde dich bei
http://macscripter.net an und frag dort. Eventuell gibt es ja auch eine mir unbekannte Möglichkeit den Zielort direkt beim Speichern mit anzugeben (denkbar: den kompletten Pfad mit Dateinamen anstatt nur dem Dateinamen angeben).
set baseFolder to choose folder
process_folders("", baseFolder as text, ".mellel")
tell application "Finder" to run application "Mellel"
on doPrint(thePath, theName)
tell application "System Events"
tell process "Mellel"
tell menu bar 1
tell menu "Ablage"
click menu item "Drucken …"
end tell
end tell
tell sheet 1 of window 1
tell menu button "PDF"
click
pick menu item "Als PDF sichern …" of menu 1
end tell
end tell
end tell
end tell
-- jetzt die gespeicherte Datei (wird ja immer am selben Ort gespeichert) in den Zielordner verschieben
tell application "Finder"
--move it
end tell
end doPrint
on process_folders(root, folderNameToProcess, fileExt)
-- copied from https://stackoverflow.com/questions/3896175/applescript-processing-files-in-folders-recursively
tell application "Finder"
set theItems to every file of folder (root & folderNameToProcess)
repeat with theFile in theItems
copy name of theFile as string to FileName
repeat with ext in fileExt
if FileName ends with ext then
tell application "Finder" to open theFile
-- enthält theFile den Pfad mit Namen oder nur den Pfad?
my doPrint(theFile, FileName)
end if
end repeat
end repeat
set theFolders to name of folders of folder (root & folderNameToProcess)
repeat with theFolder in theFolders
copy theFolder as string to TheFolderName
display dialog (folderNameToProcess & TheFolderName & ":")
try
process_folders(folderNameToProcess, TheFolderName & ":", fileExt)
on error errStr number errorNumber
display dialog errStr
end try
end repeat
end tell
end process_folders
Hilfreich?
0
hidalgo
03.08.17
10:26
Hallo MikeMuc
Vielen Dank für deine Arbeit.
Leider stoppt dein Skript nicht nach getaner Arbeit.
Er ist viel eleganter als das, was ich gebastelt habe
set folderToProcess to (choose folder with prompt "Choose Folder::")
tell application "Finder"
activate
set fileExt to {".mellel"}
set theTopFolder to (folderToProcess as alias)
repeat with EachFile in (get every file of folder (folderToProcess as alias))
try
copy name of EachFile as string to FileName
repeat with ext in fileExt
if FileName ends with ext then
set result to (open EachFile)
tell application "System Events"
tell process "Mellel"
tell menu bar 1
tell menu "Ablage"
click menu item "Drucken …"
end tell
end tell
tell sheet 1 of window 1
tell menu button "PDF"
click
pick menu item "Als PDF sichern …" of menu 1
end tell
end tell
click button "Sichern" of sheet 1 of sheet 1 of window 1
click button 1 of window 1
end tell
end tell
end if
end repeat
end try
end repeat
repeat with EachSubDir in (get every folder of folder theTopFolder)
try
repeat with EachFile in (get every file of folder (EachSubDir as alias))
try
copy name of EachFile as string to FileName
repeat with ext in fileExt
if FileName ends with ext then
set result to (open EachFile)
tell application "System Events"
tell process "Mellel"
tell menu bar 1
tell menu "Ablage"
click menu item "Drucken …"
end tell
end tell
tell sheet 1 of window 1
tell menu button "PDF"
click
pick menu item "Als PDF sichern …" of menu 1
end tell
end tell
click button "Sichern" of sheet 1 of sheet 1 of window 1
click button 1 of window 1
end tell
end tell
end if
end repeat
end try
end repeat
end try
end repeat
end tell
Was bleibt ist die Möglichkeit, entweder die PDFs nach der Erstellung zu verschieben oder den richtigen Pfad direkt mitzugeben.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
MikeMuc
03.08.17
10:35
Oh, du ist aber fix...
mir ist nämlich eingefallen das man vor dem "end doPrint" natürlich erstmal das Fenster der aktuellen Datei noch schließen sollte. Sonst stehst du am Ende mit sehr vielen offenen Fenstern da oder irgendwas stürzt ab... Ich bin mir sicher das du das mit dem Fenster schließen noch selber hin bekommst.
Und für die verbleibende Übung würde ich mich wirklich in ein Forum begeben wo mehr "Applescriptler" sind. Füttere die mit deinem Ansatz und ich bin sicher es wird eine Lösung geben.
Hilfreich?
0
hidalgo
03.08.17
10:40
Hier wird erklärt, wie man den Pfad eingibt
set the clipboard to "/path/to/your/folder"
tell application "System Events" to tell process "SketchUp" -- I'm guessing on SketchUp name
keystroke "G" using {command down, shift down}
delay 1
keystroke "v" using {command down}
delay 1
keystroke return
delay 1
keystroke return
delay 1
end tell
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
MikeMuc
03.08.17
12:08
Na ist doch super. Eigentlich genau das was ich vermutet habe.
Testen kannst du das ja erstmal in dem du das "zu Fuß" in deinem Workflow machst. Denke dran das Applescriptpfade die einzelnen Ordner mit ":" trennt, du hier den Pfad (mit Dateiname) aber mit "/" (Posix-Path) einfügen mußt. Dafür gibt es hier eine Anleitung
Zum Testen einfach folgendes Script versuchen
set x to choose file
set y to POSIX path of x
log y
Das Ergebnis dann mal händisch in den Speicherndialog kopieren und schauen ob die Datei korrekt erstellt wurde. Wenn ja, das ganze in das Script oben einbauen...
Hilfreich?
+1
hidalgo
03.08.17
16:13
So, ich glaube, ich habe es geschafft. Der Skript sollte auch für andere Programme einsetzbar sein: einfach Dateiendung und Applikation anpassen.
Nochmals vielen Dank an alle, die mitgeholfen haben.
set folderToProcess to (choose folder with prompt "Ordner wählen:")
tell application "Finder"
activate
set fileExt to {".mellel"}
set theTopFolder to (folderToProcess as alias)
repeat with EachFile in (get every file of folder (folderToProcess as alias))
try
copy name of EachFile as string to FileName
repeat with ext in fileExt
if FileName ends with ext then
set result to (open EachFile)
set fileLocation to container of EachFile as alias
set myPath to POSIX path of fileLocation
tell application "System Events"
tell process "Mellel"
tell menu bar 1
tell menu "Ablage"
click menu item "Drucken …"
end tell
end tell
tell sheet 1 of window 1
tell menu button "PDF"
click
pick menu item "Als PDF sichern …" of menu 1
end tell
keystroke "G" using {command down, shift down}
delay 1
set value of combo box "Den folgenden Ordner öffnen:" of sheet 1 of sheet 1 to myPath as text
click button "Öffnen" of sheet 1 of sheet 1
end tell
click button "Sichern" of sheet 1 of sheet 1 of window 1
click button 1 of window 1
end tell
end tell
end if
end repeat
end try
end repeat
repeat with EachSubDir in (get every folder of folder theTopFolder)
try
repeat with EachFile in (get every file of folder (EachSubDir as alias))
try
copy name of EachFile as string to FileName
repeat with ext in fileExt
if FileName ends with ext then
set result to (open EachFile)
set fileLocation to container of EachFile as alias
set myPath to POSIX path of fileLocation
tell application "System Events"
tell process "Mellel"
tell menu bar 1
tell menu "Ablage"
click menu item "Drucken …"
end tell
end tell
tell sheet 1 of window 1
tell menu button "PDF"
click
pick menu item "Als PDF sichern …" of menu 1
end tell
keystroke "G" using {command down, shift down}
delay 1
set value of combo box "Den folgenden Ordner öffnen:" of sheet 1 of sheet 1 to myPath as text
click button "Öffnen" of sheet 1 of sheet 1
end tell
click button "Sichern" of sheet 1 of sheet 1 of window 1
click button 1 of window 1
end tell
end tell
end if
end repeat
end try
end repeat
end try
end repeat
end tell
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
+1
bmonno
03.08.17
20:28
hidalgo,
MikeMuc
Danke für diesen wunderbar konstruktiven Thread, hat Freude gemacht, ihn zu verfolgen. Vor ein paar Jahren hätte ich so ein Skript gebraucht, als AppleWorks in die Wüste geschickt wurde. Ich habe es irgendwie anders gelöst, es waren auch nicht so viele Dokumente
Hilfreich?
+2
hidalgo
03.08.17
20:33
bmonno
hidalgo,
MikeMuc
Danke für diesen wunderbar konstruktiven Thread, hat Freude gemacht, ihn zu verfolgen. Vor ein paar Jahren hätte ich so ein Skript gebraucht, als AppleWorks in die Wüste geschickt wurde. Ich habe es irgendwie anders gelöst, es waren auch nicht so viele Dokumente
Ich glaube es gab offizielle Werkzeuge, um AppleWorks-Dateien zu konvertieren. Nur Datenbanken blieben auf der Strecke. Oder konnte man die zu Bento migrieren? Das gibt es leider auch nicht mehr.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
hidalgo
04.08.17
00:44
Mist, jetzt dachte ich doch wirklich, ich hätte es geschafft. Leider berücksichtigt der Skript nur die ersten Unterordner. Weiter verschachtelte Dateien werden nicht gefunden.
Wo liegt der Fehler?
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
MikeMuc
04.08.17
08:10
Stichwort Rekursion
Ich hab mich schon gewundert warum du bei deine Variante geblieben bist...
Du brauchst halt wie Funktion die sich selber aufraucht um die komplette Ordnerstruktur unterhalb des Basisordners zu durchlaufen.
Versuche noch einmal, mein Beispiel zu verstehen.
Hilfreich?
0
hidalgo
04.08.17
08:45
Danke. Wahrscheinlich habe ich deinen Ansatz nicht weiterverfolgt, weil er nicht funktioniert und ich es auch nicht verstehe. Habe mir jetzt die Mühe gemacht und ihn angepasst (der Einfachheit halber und weil ich hier kein Mellel habe, habe ich TextEdit eingesetzt) und habe 3 Probleme:
set baseFolder to choose folder
process_folders("", baseFolder as text, ".txt")
tell application "Finder" to run application "TextEdit"
on doPrint(thePath, theName)
tell application "System Events"
tell process "TextEdit"
tell menu bar 1
tell menu "Ablage"
click menu item "Drucken …"
end tell
end tell
tell sheet 1 of window 1
tell menu button "PDF"
click
pick menu item "Als PDF sichern …" of menu 1
end tell
keystroke "G" using {command down, shift down}
delay 1
set value of combo box "Den folgenden Ordner öffnen:" of sheet 1 of sheet 1 to "/Users/urs/Desktop/test/" as text
click button "Öffnen" of sheet 1 of sheet 1
end tell
click button "Sichern" of sheet 1 of sheet 1 of window 1
click button 1 of window 1
end tell
end tell
(*
-- jetzt die gespeicherte Datei (wird ja immer am selben Ort gespeichert) in den Zielordner verschieben
tell application "Finder"
--move it
end tell
*)
end doPrint
on process_folders(root, folderNameToProcess, fileExt)
-- copied from https://stackoverflow.com/questions/3896175/applescript-proc essing-files-in-folders-recursively
tell application "Finder"
set theItems to every file of folder (root & folderNameToProcess)
repeat with theFile in theItems
copy name of theFile as string to FileName
repeat with ext in fileExt
if FileName ends with ext then
tell application "Finder" to open theFile
-- enthält theFile den Pfad mit Namen oder nur den Pfad?
(* set result to (open theFile) *)
set fileLocation to container of theFile as alias
set myPath to POSIX path of fileLocation
my doPrint(theFile, FileName)
end if
end repeat
end repeat
set theFolders to name of folders of folder (root & folderNameToProcess)
repeat with theFolder in theFolders
copy theFolder as string to TheFolderName
display dialog (folderNameToProcess & TheFolderName & ":")
try
(* process_folders(folderNameToProcess & TheFolderName & ":", fileExt) *)
process_folders(folderNameToProcess & TheFolderName & ":")
on error errStr number errorNumber
display dialog errStr
end try
end repeat
end tell
end process_folders
1. Wo soll ich die Pfadvariable
set myPath to POSIX path of fileLocation
setzen, die dann hier
set value of combo box "Den folgenden Ordner öffnen:" of sheet 1 of sheet 1 to myPath as text
aufgerufen wird?
2. Die erste Datei wird zweimal geöffnet
3. Der Skript läuft nicht weiter
tell application "Finder"
get name of every folder of folder "Macintosh HD:Users:urs:Desktop:test:"
--> {"test2"}
display dialog "Macintosh HD:Users:urs:Desktop:test:test2:"
--> {button returned:"OK"}
process_folders("Macintosh HD:Users:urs:Desktop:test:test2:")
--> error number -1708
display dialog "„Finder“ hat einen Fehler erhalten: Fortfahren nicht möglich: process_folders."
--> {button returned:"OK"}
end tell
Wie schon gesagt, deine Lösung scheint viel eleganter zu sein, aber auch komplexer zu verstehen.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
MikeMuc
04.08.17
13:45
Ok, ein weiterer Versuch.
1. Ersetze die Zeile "on doPrint(thePath, theName)" durch "on doPrint(thePath)"
2. Ersetze die Zeile "my doPrint(theFile, FileName)" durch "my doPrint(myPath)"
3. Ersetze die der Zeile mit der combobox durch " set value of combo box "Den folgenden Ordner öffnen:" of sheet 1 of sheet 1 to thePath
"
Den Kommentar vor "end doPrint" kannst du löschen und dafür einen weiteren Teil mit UI-Scripting einsetzen der dafür sorg das das Fenster wieder geschlossen wird. So in der Art
tell application "System Events"
tell process "TextEdit"
tell menu bar 1
tell menu "Ablage"
click menu item "Schließen"
end tell
end tell
end tell
end tell
Dann hast du in der Funktion "process_folders" noch einen Fehler eingebaut der im Original so nicht drin war. Die Zeile zwischen try und on error muß
process_folders(folderNameToProcess, TheFolderName & ":", fileExt)
lauten. Schließlich erwartet die Funktion 3 Parameter. Da kannst du nicht einfach ein Komma durch ein & ersetzen.
Und dann hab ich wohl auch noch einen Fehler in der 2. Zeile verursacht. Die Dateiendung muß in geschweiften Klammern stehen, also so aussehen "process_folders("", baseFolder as text, {".txt"})"
Der Vollständigkeit halber kommt das komplette Script gleich in einem extra Post.
Hilfreich?
0
MikeMuc
04.08.17
13:45
set baseFolder to choose folder
process_folders("", baseFolder as text, {".txt"})
tell application "Finder" to run application "TextEdit"
on doPrint(thePath)
tell application "System Events"
tell process "TextEdit"
tell menu bar 1
tell menu "Ablage"
click menu item "Drucken …"
end tell
end tell
tell sheet 1 of window 1
tell menu button "PDF"
click
pick menu item "Als PDF sichern …" of menu 1
end tell
keystroke "G" using {command down, shift down}
delay 1
set value of combo box "Den folgenden Ordner öffnen:" of sheet 1 of sheet 1 to thePath
click button "Öffnen" of sheet 1 of sheet 1
end tell
click button "Sichern" of sheet 1 of sheet 1 of window 1
click button 1 of window 1
end tell
end tell
tell application "System Events"
tell process "TextEdit"
tell menu bar 1
tell menu "Ablage"
click menu item "Schließen"
end tell
end tell
end tell
end tell
end doPrint
on process_folders(root, folderNameToProcess, fileExt)
-- copied from https://stackoverflow.com/questions/3896175/applescript-processing-files-in-folders-recursively
tell application "Finder"
set theItems to every file of folder (root & folderNameToProcess)
repeat with theFile in theItems
copy name of theFile as string to FileName
repeat with ext in fileExt
if FileName ends with ext then
log {ext, FileName}
tell application "Finder" to open theFile
-- enthält theFile den Pfad mit Namen oder nur den Pfad?
(* set result to (open theFile) *)
set fileLocation to container of theFile as alias
set myPath to POSIX path of fileLocation
my doPrint(myPath)
end if
end repeat
end repeat
set theFolders to name of folders of folder (root & folderNameToProcess)
repeat with theFolder in theFolders
copy theFolder as string to TheFolderName
display dialog (folderNameToProcess & TheFolderName & ":")
try
process_folders(folderNameToProcess, TheFolderName & ":", fileExt)
--process_folders(folderNameToProcess & TheFolderName & ":")
on error errStr number errorNumber
display dialog errStr
end try
end repeat
end tell
end process_folders
Hilfreich?
0
hidalgo
04.08.17
13:59
Super. 2 Probleme gelöst, das Dritte bleibt bestehen.
Der Skript läuft einfach nicht weiter sondern gibt eine Fehlermeldung aus:
tell application "Finder"
get name of every folder of folder "Macintosh HD:Users:urs:Desktop:test:"
--> {"test2"}
display dialog "Macintosh HD:Users:urs:Desktop:test:test2:"
--> {button returned:"OK"}
process_folders("Macintosh HD:Users:urs:Desktop:test:", "test2:", {".txt"})
--> error number -1708
display dialog "„Finder“ hat einen Fehler erhalten: Fortfahren nicht möglich: process_folders."
--> {button returned:"OK"}
end tell
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
hidalgo
04.08.17
14:21
Jetzt durchläuft der Skript wenigstens den ersten Unterordner. Die nächste Hierarchiestufe wird wieder mit einem Fehler quittiert.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
MikeMuc
04.08.17
15:54
OK, folge dem Hinweis in deinem Screenshot. Lesen kannst du doch
Besteht dein Problem dann weiterhin?
Hilfreich?
0
hidalgo
04.08.17
17:03
MikeMuc
OK, folge dem Hinweis in deinem Screenshot. Lesen kannst du doch
Besteht dein Problem dann weiterhin?
Ja, ich kann lesen. Ich hatte ja geschrieben, dass der Skript zwar eine Stufe weiterläuft aber dann wieder abbricht.
Ich habe jetzt zwei Varianten mit unterschiedlichen Fehlern:
1.
set theItems to files of entire contents of folder (root & folderNameToProcess)
damit läuft der Skript durch, stoppt aber nicht.
2.
set theItems to every file of folder (root & folderNameToProcess)
damit bricht der Skript mit Fehler ab
Hast du eine Idee?
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
hidalgo
04.08.17
17:25
Ich glaube, ich habe die Lösung gefunden. Den ganzen hier auskommentierten Teil braucht es gar nicht. Oder liegt der Fehler anderswo?
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
MikeMuc
04.08.17
17:33
Ja, habe ich.
Hast du das my eingefügt? Ich vermute: Nein.
Und bitte entferne die Zeile mit "display Dialog" vor dem try. Sonst hält das Script jedesmal an wenn es in einen weiteren Ordner hinabsteigt.
Falls doch:
Da scheint wirklich noch ein Fehler irgendwo drin zu sein. Denn wenn man sich die Ausgabe im Scripteditor anschaut dann fehlt bei den Unterordnern "der vordere Teil" des Pfades.
Bitte ersetze die Zeile mit dem my process_folders durch
my process_folders(root & folderNameToProcess, TheFolderName & ":", fileExt)
Die Ergänzung mit "root &" hat hier das Problem gelöst.
Hilfreich?
0
hidalgo
04.08.17
17:56
Danke.
Ja, ich hatte das “my” eingefügt. Ich frage mich gerade, warum es geklappt hatte, als ich den ganzen Teil (siehe Screenshot) auskommentiert hatte.
Werde es gerade nochmals mit deinen Korrekturen probieren.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
MikeMuc
04.08.17
18:00
Da hat es nur in der "obersten" Ordnereben geklappt. Alles was darunter lag ist ja nicht verarbeitet worden. Das was du da auskommentiert hast ist ja dafür verantwortlich die Unterordner verarbeitet werden
Hilfreich?
0
hidalgo
04.08.17
18:03
MikeMuc
Da hat es nur in der "obersten" Ordnereben geklappt. Alles was darunter lag ist ja nicht verarbeitet worden. Das was du da auskommentiert hast ist ja dafür verantwortlich die Unterordner verarbeitet werden
Das war ja das erstaunliche daran. Damit hat es auch die Unterordner berücksichtigt. Aber mit deiner Korrektur läuft es jetzt auch und zwar richtig.
Nochmals
Vielen lieben Dank
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
hidalgo
04.08.17
18:27
Ich glaube, wir biegen gerade in die Zielgerade ein. Das Skript, unser Skript läuft zwar mit TextEdit hervorragend, Mellel macht aber noch Probleme. Und zwar habe ich zwei Arten von Mellel-Dokumenten (ältere und neuere). Bei den älteren fragt Mellel, ob die Dateien umgewandelt werden sollen.
Beim alten Skript konnte ich dies mit dieser Zeile abfangen
tell application "System Events" to tell (first button whose name is "Bestehende Datei ersetzen") of window 1 of application process "Mellel" to if exists then click
Beim neuen Skript funktioniert das nicht mehr. Wahrscheinlich weil es unprofessionell und quick’n’dirty geschrieben ist. Wie gehört sowas wo hin?
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
MikeMuc
04.08.17
18:33
Bitte, ich hoffe du hast jetzt ordentlich was von Applescript gelernt
Aber das es in wirklich mit dem auskommentierten Block in die Unterordner gegangen ist kann ich leider nicht glauben. Wobei: du hast da noch eine Zeile "verbastelt" die ursprünglich anders hieß.
set theItems to files of entire contents of folder (root & folderNameToProcess)
gibt auf einen Schlag alle Dateien aller Ordner aus. Da braucht man dann natürlich die Rekursiv durch die Ordner nicht. Bei richtig großem Datenmengen ist das aber eine Performancebremse und daher ein NoGo.
Im Original stand da nur
"set theItems to files of folder (root & folderNameToProcess)
und das beschränkt die Ausgabe auf alle Dateien und Ordner des vorgegebenen Ordners.
==> auf eigenmächtige Änderungen bitte in Zukunft
deutlich
hinweisen
Hilfreich?
0
hidalgo
04.08.17
18:46
Ich hatte doch hier
darauf hingewiesen.
Ich hatte einfach einen anderen Skript gesucht und geschaut, wo sich was unterscheidet. Dass bei der Rekursion etwas gefehlt hatte, ist mir ja nicht aufgefallen.
Ja, ich habe viel gelernt. Problematisch ist nur, dass ich sehr selten mal was brauche und dann wohl das Meiste wieder vergessen habe.
Hoffentlich kannst du mir auch beim letzten Schliff noch helfen.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
MikeMuc
04.08.17
19:17
Tja, auch hier kommst du nur mit UI-Scripting weiter. Ich würde den Namen des 1. Buttons des Dialogs abfragen und dann per
If button Name = X then tu dies
if button Name = y then tu das
weiterarbeiten. Bleibt die Frage wie du nach dem öffnen feststellen kannst ob es eine Dialog gibt. Da könntest du vielleicht so vorgehen:
try
get Name of button of ...
if ... then ...
end
Mangels Mellel und unterschiedlich alter Versionen von Melleldateien kann ich dir da leider nicht weiter helfen.
Um Dialoge zu "untersuchen" hab ich ein Programm namens UIElementInspector. Das war / ist mal bei einer XCode Version dabei.
Das kannst aber auch einzeln hier
laden. Einfach den Samplecode laden, da ist eine kompilierte Version bei.
Hilfreich?
0
hidalgo
04.08.17
20:45
Nochmals vielen Dank. Ich hatte den Code schon. Ich hatte nur vergessen, wieder ein Delay einzubauen, damit der Skript auf das Erscheinen des Fensters wartet:
tell application "System Events"
tell process "Mellel"
delay 2
tell application "System Events" to tell (first button whose name is "Bestehende Datei ersetzen") of (first window of application process "Mellel" whose description is "Dialog") to if exists then click
tell menu bar 1
…
Es braucht jetzt etwas mehr Zeit, aber das ist vertretbar, da das eine einmalige Aktion ist. Die ersten richtigen Daten sind schon konvertiert.
„«Probleme kann man nie mit derselben Denkweise lösen, durch die sie entstanden sind.» Albert Einstein“
Hilfreich?
0
1
2
>|
Kommentieren
Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.
iOS 18, iPadOS 18, macOS 15: Das Release-Datum ...
iPhone 16 Pro: Tippen oder Wischen ignoriert, N...
Apple aktualisiert Zubehör: Magic Mouse, Magic ...
macOS 15 Sequoia ist da – Apple hat den Startsc...
Daten zum Mac mini M4: Aufpreise, Spezifikation...
Musikbranche verklagt KI-Anbieter
Vor 30 Jahren: Apple holt Sanierer – kann das s...
Eskalationskurs: ARM kündigt Qualcomm die Desig...