[GastForen Programmierung/Entwicklung AppleScript Dateien verschieben ohne vorhandene zu überschreiben

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

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

8. Sep 2010, 15:38
Beitrag # 1 von 46
Bewertung:
(10159 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

das letzte Modul meines Scriptes soll das verschieben von Dokumenten sein, ohne vorhandene Dateien im Zielverzeichnis zu überschreiben.

Da ich mich erst seit 20 Tagen mit Apple Script beschäftige, und hier wirklich eine tolle Hilfe hatte, möchte ich etwas von meinen Erfahrungen in den letzten Tagen zurück geben.

Wie Fange ich an???
Starte den Apple Script Editor und schreibe nichts anderes als Kommentare hinein. Schreibt einfach alles als Kommentar selbst wenn Ihr noch nicht wisst wie es umgesetzt wird, wie das Prüfen ob das Dokument im Ziel Verzeichnis schon existiert. Wichtig ist, dass Ihr es mit aufnehmt.

Code
-- Modul Dateien verschieben ohne vorhandene Dateien zu überschreiben 
-- Version 0.0.0 Stand: 08.09.2010

-- Quell Verzeichnis (Ordner) auswählen aus dem die Dokumente kommen
-- Ziel Verzeichnis (Ordner) wählen wohin die Dateien verschoben werden sollen
-- Erstes Dokument finden und in eine Variable speichern
-- Dokumentname vom Pfad trennen
-- Prüfen ob das Dokument im Ziel Verzeichnis existiert
-- Wenn es existiert dann
-- soll am ende des Dokumentenname eine zweistellige Zahl am Ende angehangen werden
-- Wenn es nicht existiert dann
-- soll es einfach in das Zielverzeichnis verschoben werden
-- zurück nach oben um das nächste Dokument in die Variable zu speichern


Danach suche ich den passenden Befehl und in einem weiteren Script Fenster probiere ich verschiedene Eigenschaften des Befehls aus und wenn ich genug darüber weiss, füge ich diesen dann ich das Script ein.
So füge ich nach und nach zu den Kommentaren die passenden Befehle.

Oft sind zu den zu den Kommentaren nicht nur Befehle nötig sondern ein Script Block wie jetzt bei "Erstes Dokument finden und in eine Variable speichern" Darunter mache ich dann Platz und schreibe weitere Kommentare hinzu für nur diesen Abschnitt.

Code
-- Modul Dateien verschieben ohne vorhandene Dateien zu überschreiben 
-- Version 0.0.1 Stand: 08.09.2010

-- Quell Verzeichnis (Ordner) auswählen aus dem die Dokumente kommen
set quellOrdner to (choose folder with prompt "Wähle den Quellordner aus") as Unicode text

-- Ziel Verzeichnis (Ordner) wählen wohin die Dateien verschoben werden sollen
set zielOrdner to (choose folder with prompt "Wähle den Zielordner für das verschieben der Dateien") as Unicode text

-- Erstes Dokument finden und in eine Variable speichern
-- Variablen zurücksetzen
-- Alle Dokument-Namen des Ouellordners in eine Liste schreiben (ohne unsichtbare Dateien)
-- Ermittlung der Anzahl Dokumente
-- Anfang: Schleife Dokumente ermitteln



-- Ende: Schleife Dokumente ermitteln



-- Dokumentname vom Pfad trennen
-- Prüfen ob das Dokument im Ziel Verzeichnis existiert
-- Wenn es existiert dann
-- soll am ende des Dokumentenname eine zweistellige Zahl am Ende angehangen werden
-- Wenn es nicht existiert dann
-- soll es einfach in das Zielverzeichnis verschoben werden
-- zurück nach oben um das nächste Dokument in die Variable zu speichern


So fange ich in der Regel an und weitere Gedanken kommen dann meist beim Kommentare schreiben.

Nachher ist es nur noch die Befehle hinzu zu fügen.

Code
-- Modul Dateien verschieben ohne vorhandene Dateien zu überschreiben 
-- Version 0.0.2 Stand: 08.09.2010

-- Quell Verzeichnis (Ordner) auswählen aus dem die Dokumente kommen
-- "Snow Leopard:Users:michael:Documents:OCR PDF:"
set quellOrdner to (choose folder with prompt "Wähle den Quellordner") as Unicode text

-- Ziel Verzeichnis (Ordner) wählen wohin die Dateien verschoben werden sollen
"Snow Leopard:Users:michael:Documents:OCR PDF:OCR Erkennung:"
set zielOrdner to (choose folder with prompt "Wähle den Zielordner für das verschieben der Dateien") as Unicode text

-- Alle Dokument-Namen des Ouellordners in eine Liste schreiben (ohne unsichtbare Dateien)
set alleDokumente to list folder quellOrdner without invisibles

-- Erstes Dokument finden und in eine Variable speichern
-- Variablen zurücksetzen

-- Ermittlung der Anzahl Dokumente
-- Anfang: Schleife Dokumente ermitteln



-- Ende: Schleife Dokumente ermitteln



-- Dokumentname vom Pfad trennen
-- Prüfen ob das Dokument im Ziel Verzeichnis existiert
-- Wenn es existiert dann
-- soll am ende des Dokumentenname eine zweistellige Zahl am Ende angehangen werden
-- Wenn es nicht existiert dann
-- soll es einfach in das Zielverzeichnis verschoben werden
-- zurück nach oben um das nächste Dokument in die Variable zu speichern


Oft kommt es vor, dass man die Kommentare dann mit den Befehlen in der Reihenfolge vertauschen muss.

Mir ist es sehr wichtig wenn ich das Script schreibe, es direkt beim schreiben zu testen. Im ERGEBNIS wird nach Ablauf des Scriptes den letzten Befehl angezeigt. Diesen kopiere ich zwischen Kommentar und Befehl wie bei Quell Verzeichnis. Dann weiss ich das es Kontrolliert wurde und welchen Inhalt es hat. Das spart mir auf die Dauer ständiges Kontrollieren.

Also bis dann, morgen geht es weiter.

Viele Grüsse

Michael

(Dieser Beitrag wurde von michael m. am 8. Sep 2010, 16:53 geändert)
X

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

9. Sep 2010, 10:18
Beitrag # 2 von 46
Beitrag ID: #450931
Bewertung:
(10127 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

Wenn ich eine Schleife schreibe (z.B. repeat), dann schreibe ich auch direkt das Ende hinzu (end repeat). Und fülle dann den Inhalt der Schleife auf.

Code
-- Modul Dateien verschieben ohne vorhandene Dateien zu überschreiben 
-- Version 0.0.3 Stand: 09.09.2010

-- Quell Verzeichnis (Ordner) auswählen aus dem die Dokumente kommen
-- "Snow Leopard:Users:michael:Documents:OCR PDF:"
set quellOrdner to (choose folder with prompt "Wähle den Quellordner") as Unicode text

-- Ziel Verzeichnis (Ordner) wählen wohin die Dateien verschoben werden sollen
"Snow Leopard:Users:michael:Documents:OCR PDF:OCR Erkennung:"
set zielOrdner to (choose folder with prompt "Wähle den Zielordner für das verschieben der Dateien") as Unicode text

-- Alle Dokument-Namen des Ouellordners in eine Liste schreiben (ohne unsichtbare Dateien)
-- {"Astron - Bedienungsanleitung - Deckenventilator-1.pdf", "OCR Erkennung"}
set alleDokumente to list folder quellOrdner without invisibles

-- Variablen zurücksetzen
-- Ermittlung der Anzahl Dokumente
-- (2)
set dokumentAnzahl to count of alleDokumente

-- Erstes PDF Dokument finden und in eine Variable speichern
repeat with pdfSchleife from 1 to dokumentAnzahl -- Beginn: Schleife Dokumentmanipulation
end repeat



-- Ermittlung der Anzahl Dokumente
-- Anfang: Schleife Dokumente ermitteln



-- Ende: Schleife Dokumente ermitteln



-- Dokumentname vom Pfad trennen
-- Prüfen ob das Dokument im Ziel Verzeichnis existiert
-- Wenn es existiert dann
-- soll am ende des Dokumentenname eine zweistellige Zahl am Ende angehangen werden
-- Wenn es nicht existiert dann
-- soll es einfach in das Zielverzeichnis verschoben werden
-- zurück nach oben um das nächste Dokument in die Variable zu speichern


mittlerweile passt zu jedem Kommentar auch ein Befehl und man sieht auch welche Ergebnisse erzielt werden, wenn man das Script bis zu der jeweiligen Position laufen lässt.

Code
-- Modul Dateien verschieben ohne vorhandene Dateien zu überschreiben 
-- Version 0.0.4 Stand: 09.09.2010

-- Quell Verzeichnis (Ordner) auswählen aus dem die Dokumente kommen
-- "Snow Leopard:Users:michael:Documents:OCR PDF:"
set quellOrdner to (choose folder with prompt "Wähle den Quellordner") as Unicode text

-- Ziel Verzeichnis (Ordner) wählen wohin die Dateien verschoben werden sollen
"Snow Leopard:Users:michael:Documents:OCR PDF:OCR Erkennung:"
set zielOrdner to (choose folder with prompt "Wähle den Zielordner für das verschieben der Dateien") as Unicode text

-- Alle Dokument-Namen des Ouellordners in eine Liste schreiben (ohne unsichtbare Dateien)
-- {"Astron - Bedienungsanleitung - Deckenventilator-1.pdf", "OCR Erkennung"}
set alleDokumenteQuelle to list folder quellOrdner without invisibles
-- {"Astron - Bedienungsanleitung - Deckenventilator-1.pdf"}
set alleDokumenteZiel to list folder zielOrdner without invisibles

-- Variablen zurücksetzen
-- Ermittlung der Anzahl Dokumente
set dokumentAnzahl to count of alleDokumenteQuelle -- (2)

-- Erstes PDF Dokument finden und in eine Variable speichern
repeat with pdfSchleife from 1 to dokumentAnzahl -- Beginn: Schleife Dokumente ermitteln
set dokumentNameQuelle to (item pdfSchleife of my alleDokumenteQuelle)
if dokumentNameQuelle ends with ".pdf" then -- nur PDF Elemente werden weitergeleitet
-- "Astron - Bedienungsanleitung - Deckenventilator-1.pdf"
set quellDokument to dokumentNameQuelle
end if
-- Prüfen ob das Dokument im Ziel Verzeichnis existiert
-- Wenn es existiert dann
if (quellDokument as text) contains alleDokumenteZiel then
-- soll am Ende des Dokumentenname eine zweistellige Zahl am Ende angehangen werden
display dialog "ist im Zielverzeichnis vorhanden"
else
-- Wenn es nicht existiert dann
display dialog "ist im Zielverzeichnis nicht enthalten"
-- soll es einfach in das Zielverzeichnis verschoben werden
end if

-- zurück nach oben um das nächste Dokument in die Variable zu speichern
end repeat -- Ende: Schleife Dokumente ermitteln


Das Script vergleicht schon die Dokumente von der Quelle mit dem Ziel und gibt auch entsprechende Meldungen aus.

Jetzt muss nur noch der Code geschrieben werden um das Quelldokument zu verändern um die vorhandene Datei nicht zu überschreiben.
Dazu gehe ich an die Position nach dem Kommentar "-- Modul Dateien verschieben ohne vorhandene Dateien zu überschreiben

Code
 
-- Version 0.0.4 Stand: 09.09.2010

-- Quell Verzeichnis (Ordner) auswählen aus dem die Dokumente kommen
-- "Snow Leopard:Users:michael:Documents:OCR PDF:"
set quellOrdner to (choose folder with prompt "Wähle den Quellordner") as Unicode text

-- Ziel Verzeichnis (Ordner) wählen wohin die Dateien verschoben werden sollen
"Snow Leopard:Users:michael:Documents:OCR PDF:OCR Erkennung:"
set zielOrdner to (choose folder with prompt "Wähle den Zielordner für das verschieben der Dateien") as Unicode text

-- Alle Dokument-Namen des Ouellordners in eine Liste schreiben (ohne unsichtbare Dateien)
-- {"Astron - Bedienungsanleitung - Deckenventilator-1.pdf", "OCR Erkennung"}
set alleDokumenteQuelle to list folder quellOrdner without invisibles
-- {"Astron - Bedienungsanleitung - Deckenventilator-1.pdf"}
set alleDokumenteZiel to list folder zielOrdner without invisibles

-- Variablen zurücksetzen
-- Ermittlung der Anzahl Dokumente
set dokumentAnzahl to count of alleDokumenteQuelle -- (2)

-- Erstes PDF Dokument finden und in eine Variable speichern
repeat with pdfSchleife from 1 to dokumentAnzahl -- Beginn: Schleife Dokumente ermitteln
set dokumentNameQuelle to (item pdfSchleife of my alleDokumenteQuelle)
if dokumentNameQuelle ends with ".pdf" then -- nur PDF Elemente werden weitergeleitet
-- "Astron - Bedienungsanleitung - Deckenventilator-1.pdf"
set quellDokument to dokumentNameQuelle
end if
-- Prüfen ob das Dokument im Ziel Verzeichnis existiert
-- Wenn es existiert dann
if (quellDokument as text) contains alleDokumenteZiel then
-- soll am Ende des Dokumentenname eine zweistellige Zahl am Ende angehangen werden
display dialog "ist im Zielverzeichnis vorhanden"
else
-- Wenn es nicht existiert dann
display dialog "ist im Zielverzeichnis nicht enthalten"
-- soll es einfach in das Zielverzeichnis verschoben werden
end if

-- zurück nach oben um das nächste Dokument in die Variable zu speichern
end repeat -- Ende: Schleife Dokumente ermitteln"


und füge dort neue Kommentare ein. Nur Kommentare. Ich habe gemerkt, das die Code Findung viel schneller und besser funktioniert, wenn man einen Textablauf vorgegeben hat.

Mein Englisch ist nicht das beste und die Schule ist 24 Jahr her daher muss ich meist Nachschlagen.
Also um nicht Blockiert zu werden und in Details zu verlieren nur Kommentare einsetzen.

Viele Grüsse
Michael


als Antwort auf: [#450868]

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

9. Sep 2010, 18:52
Beitrag # 3 von 46
Beitrag ID: #451013
Bewertung:
(10099 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

hier ist noch eine Variante Dateien zu vergleichen und zu verschieben.

Code
-- Modul Dateien verschieben ohne vorhandene Dateien zu überschreiben 
-- Version 0.0.5 Stand: 09.09.2010

-- Variablen zurücksetzen
-- set quellOrdner to ""
-- set zielOrdner to ""

-- Quell Verzeichnis (Ordner) auswählen aus dem die Dokumente kommen
-- "Snow Leopard:Users:michael:Documents:OCR PDF:"
set quellOrdner to (choose folder with prompt "Wähle den Quellordner") as Unicode text

-- Ziel Verzeichnis (Ordner) wählen wohin die Dateien verschoben werden sollen
-- "Snow Leopard:Users:michael:Documents:OCR PDF:OCR Erkennung:"
set zielOrdner to (choose folder with prompt "Wähle den Zielordner für das verschieben der Dateien") as Unicode text

-- Variablen
-- Alle Dokument-Namen des Ouellordners in eine Liste schreiben (ohne unsichtbare Dateien)
repeat
set alleDokumenteQuelle to list folder quellOrdner without invisibles
set alleDokumenteZiel to list folder zielOrdner without invisibles

set aktuellesDokument to item 1 of alleDokumenteQuelle

if aktuellesDokument = "" then
-- ende des Scriptes
exit repeat
end if

if aktuellesDokument ends with ".pdf" then
display dialog " ja ist ein PDF"
if alleDokumenteZiel contains aktuellesDokument then
-- Dokument umbenennen
-- Dokument verschieben
else
-- Dokument verschieben
try
tell application "Finder"
move file (quellOrdner & aktuellesDokument) to (zielOrdner & aktuellesDokument)
end tell
end try

end if
else
display dialog "nein ist kein PDF"
-- zurück
end if
end repeat


Wenn ich Erhlich bin kann ich mich nicht entscheiden, welche von beiden die bessere ist.

Viele Grüsse

Michael


als Antwort auf: [#450931]

Dateien verschieben ohne vorhandene zu überschreiben

Hans Haesler
  
Beiträge gesamt: 5826

9. Sep 2010, 21:52
Beitrag # 4 von 46
Beitrag ID: #451024
Bewertung:
(10085 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

also ... wenn ich ehrlich bin: weder noch. ;-)

Derber Spasskommentar beiseite: Beide Versionen haben ihre Mängel.

In der Version 0.0.4 ist der Test, ob das Dokument im Zielordner schon existiert, verkehrt konstruiert.

Code
if (quellDokument as text) contains alleDokumenteZiel then 

Die Prüfung "enthält der Name des aktuellen Dokuments die Liste der Namen der Dateien im Zielordner", kann nicht funktionieren. Zudem ist die Die Konvertierung "as text" überflüssig. Besser wäre:

Code
if alleDokumenteZiel contains quellDokument then 

Das ist in der Version 0.0.5 korrigiert, aber immer noch nicht optimal. Doch davon später.

Die Datei-Namen des Quellordners werden aufgelistet. Das ist in Ordnung. Aber dass auch die Namen der Dateien im Zielordner erfasst werden, ist unnötig.

Gar nicht gut ist die Schleife, welche mit einem simplen repeat beginnt. Ohne automatischen Zähler. Ohne Ausstiegsbedingung.
Und, noch weniger gut: Mit ...

Code
set aktuellesDokument to item 1 of alleDokumenteQuelle 

... wird bei jedem der (unendlichen) Umgänge das erste Dokument der Liste des Quellordners angesprochen. Aber was ist, wenn dieses Dokument in den Zielordner verschoben wurde? Nichts geht mehr.

Beim Verschieben ist auch ein Nichtfunktionieren programmiert.

Code
tell application "Finder" 
move file (quellOrdner & aktuellesDokument) to (zielOrdner & aktuellesDokument)
end tell

Die zu verschiebende Datei ist korrekt bezeichnet. Aber als Ziel darf nur der Ordner-Pfad eingesetzt werden. Und nicht jener der Zieldatei. Nämlich so:

Code
  move file (quellOrdner & aktuellesDokument) to folder zielOrdner 

Die Bezeichnung folder ist nicht unbedingt notwendig. Macht aber die Aktion klarer.

Die Outline, wie das Verschieben funktionieren könnte.
1. Die Dokumentnamen des Quellordners auflisten.
2. In der Schleife feststellen, ob es ein PDF-Dokument ist.
3. Wenn ja, im Zielordner nachschauen, ob dieses Dokument schon vorhanden ist.
4. Falls nicht, das Dokument verschieben.
5. Falls doch, das Dokument zuerst umbenennen, erneut prüfen, ob vorhanden und dann verschieben.

Der Punkt 5 hat es in sich ... Deshalb zunächst nur, wie die Prüfung ob die Datei vorhanden ist (oder nicht) vorgenommen werden kann.

Eine Möglichkeit ist, den Finder einzuspannen und ihn zu fragen, ob die Datei im Zielordner existiert:

Code
set quellOrdner to (choose folder with prompt "Wähle den Quellordner") as Unicode text 
set zielOrdner to (choose folder with prompt "Wähle den Zielordner für das Verschieben der Dateien") as Unicode text
set dokList to list folder quellOrdner without invisibles
set aktuellesDokument to item 1 of dokList

tell application "Finder"
if exists (file (zielOrdner & aktuellesDokument)) then
display dialog "Datei existiert"
-- die Datei ist schon vorhanden; also umbenennen und erst dann verschieben
else
display dialog "Datei existiert noch nicht"
-- die Datei gibt es dort noch nicht, also verschieben
try
tell application "Finder" to move file (quellOrdner & aktuellesDokument) to folder zielOrdner
end try
end if
end tell

Nun ist es aber so, dass der Finder ein sehr beschäftigter Geselle ist. Der hat nicht immer sofort Zeit für uns. Deshalb sollte man ihn nur einstzen, wenn es nicht anders geht.

Das Prüfen, ob eine Datei schon im Zielordner existiert, ist viel effizienter, wenn man den Pfad in ein Alias verwandelt. Ist die Datei schon dort, dann geschieht nichts. Ist sie aber noch nicht vorhanden, dann wird eine Fehlermeldung ausgelöst.

Das kann man sich zunutze machen, indem ein try-Wickel benutzt wird:

Code
set quellOrdner to (choose folder with prompt "Wähle den Quellordner") as Unicode text 
set zielOrdner to (choose folder with prompt "Wähle den Zielordner für das Verschieben der Dateien") as Unicode text
set dokList to list folder quellOrdner without invisibles
set aktuellesDokument to item 1 of dokList

try
alias (zielOrdner & aktuellesDokument)
display dialog "Datei existiert"
-- die Datei ist schon vorhanden; also umbenennen und erst dann verschieben
on error
display dialog "Datei existiert noch nicht"
-- die Datei gibt es dort noch nicht, also verschieben
try
tell application "Finder" to move file (quellOrdner & aktuellesDokument) to folder zielOrdner
end try
end try

Der Befehl zum Verschieben ist erneut in einer einzigen Zeile. Vor Jahren machte das enorm viel aus. Heute, mit anderer OS-Version und leistungsfähigeren Maschinen ist der Unterschied vielleicht nicht mehr spürbar. Aber schaden kann es nicht.

Gruss, Hans


als Antwort auf: [#451013]

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

9. Sep 2010, 23:31
Beitrag # 5 von 46
Beitrag ID: #451030
Bewertung:
(10073 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

als ich heute eigentlich Feierabend machen wollte, nahm ich noch mal das Buch zur Hand.

Ich konnte einfach nicht begreifen warum ich auf einmal nicht mal das simple verschieben der Dateien hin bekommen hatte!
Das hat mich so geärgert das ich mich doch dazu entschlossen habe noch mal einen Anlauf zu nehmen und habe alles was ich bisher probiert habe über bord geworfen und beim simplen verschieben begonnen.

Ich glaube gleich bekomme ich von Dir Haue wenn ich das schreiben einer PDF Liste wieder aufnehmen wollte.

Warum nicht gleich mit einem Filter?
Sollte nicht so schwer sein?

Code
set quellOrdner to "Mac Mini:Users:michael:Documents:OCR PDF:" 
set zielOrdner to "Mac Mini:Users:michael:Documents:OCR PDF:OCR Erkennung:"

set alleDokumente to list folder quellOrdner without invisibles
-- {"Astron - Bedienungsanleitung - Deckenventilator 1 Kopie 2.pdf", "Astron - Bedienungsanleitung - Deckenventilator 1 Kopie 3.pdf", "Astron - Bedienungsanleitung - Deckenventilator 1 Kopie 4.pdf", "Astron - Bedienungsanleitung - Deckenventilator 1 Kopie.pdf", "Astron - Bedienungsanleitung - Deckenventilator 1.pdf", "Astron - Bedienungsanleitung - Deckenventilator.pdf", "OCR Erkennung"}

set pdfListe to (every item of alleDokumente whose name ends with ".pdf")


Das hat irgendwie nicht funktioniert.

Dann habe ich versucht nur pdfs zu verschieben

Jetzt wollte ich das mal mit einer Zeile machen.
Ohne die Schleifen, ifs und repeats.

Code
set quellOrdner to "Mac Mini:Users:michael:Documents:OCR PDF:" 
set zielOrdner to "Mac Mini:Users:michael:Documents:OCR PDF:OCR Erkennung:"

set alleDokumente to list folder quellOrdner without invisibles
-- {"Astron - Bedienungsanleitung - Deckenventilator 1 Kopie 2.pdf", "Astron - Bedienungsanleitung - Deckenventilator 1 Kopie 3.pdf", "Astron - Bedienungsanleitung - Deckenventilator 1 Kopie 4.pdf", "Astron - Bedienungsanleitung - Deckenventilator 1 Kopie.pdf", "Astron - Bedienungsanleitung - Deckenventilator 1.pdf", "Astron - Bedienungsanleitung - Deckenventilator.pdf", "OCR Erkennung"}

try
-- soll nur PDF Daten in das Zielverzeichnis kopieren
tell application "Finder"
move (every item of quellOrdner & alleDokumenteQuelle whose name ends with ".pdf") to zielOrdner
end tell
end try


Das hat auch nicht so geklappt, ich denke ich mache jetzt Schluss und werde mir das morgen mit frischem Gedanken wieder aufnehmen.

Viele Grüsse
Michael


als Antwort auf: [#451024]

Dateien verschieben ohne vorhandene zu überschreiben

Hans Haesler
  
Beiträge gesamt: 5826

10. Sep 2010, 07:53
Beitrag # 6 von 46
Beitrag ID: #451033
Bewertung:
(10040 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

Antwort auf: Ich konnte einfach nicht begreifen warum ich auf einmal nicht mal das simple verschieben der Dateien hin bekommen hatte!

Hast Du aber versucht, meinen Ausführungen in der Antwort von 21.52 Uhr zu folgen? Und hast Du die Beispiele ausprobiert?

Das Verschieben der PDF-Dateien in einem Rutsch verunmöglicht Dein Vorhaben, gleichnamige Dateien vor dem Überschreiben zu bewahren.

Gruss, Hans


als Antwort auf: [#451030]

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

10. Sep 2010, 08:58
Beitrag # 7 von 46
Beitrag ID: #451034
Bewertung:
(10024 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

diese versuchte machte ich bevor Du gepostet hattest.
Ich beginne nun Deine Beispiele auszuprobieren.

Durch meine versuche wollte ich wissen, ob man gefiltert Elemente aus einer Liste direkt in eine andere Liste schreiben kann ohne die Schleifen, da every ja eine Liste von 1 an abarbeitet.

Anschliessend wollte ich wissen ob es mit dem Move Befehl funktioniert.

Mir war klar das es nicht direkt zu meinem Ziel führt.

Viele Grüsse
Michael


als Antwort auf: [#451033]

Dateien verschieben ohne vorhandene zu überschreiben

Hans Haesler
  
Beiträge gesamt: 5826

10. Sep 2010, 09:20
Beitrag # 8 von 46
Beitrag ID: #451035
Bewertung:
(10016 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

kommen wir auf Deine Versuche mit dem Filtern der Dateien zurück.

So bekommst Du eine Liste von Finder-Referenzen der Dateien.

Code
set quellOrdner to "Mac Mini:Users:michael:Documents:OCR PDF:" 
set zielOrdner to "Mac Mini:Users:michael:Documents:OCR PDF:OCR Erkennung:"

tell application "Finder"
set pdfListe to every file of folder quellOrdner whose file type is "PDF "
end tell

Beim file type müssen innerhalb der Anführungszeichen vier Zeichen sein. Nach dem "F" folgt ein Leerschlag.

Wenn Du nur die Namen auflisten willst:

Code
set quellOrdner to "Mac Mini:Users:michael:Documents:OCR PDF:" 
set zielOrdner to "Mac Mini:Users:michael:Documents:OCR PDF:OCR Erkennung:"

tell application "Finder"
set pdfListe to name of (every file of folder quellOrdner whose file type is "PDF ")
end tell

Aber das funktioniert nur mit Dateien, bei welchen der Dateityp vorhanden ist. Es gibt Dateien, bei welchen er entweder verlorengegangen (bei ungeschützem Versenden) oder nicht vorhanden ist (Windows-Dateien).

Mit kind (d.h. soviel wie Art) hat man mehr Erfolg:

Code
set quellOrdner to "Mac Mini:Users:michael:Documents:OCR PDF:" 
set zielOrdner to "Mac Mini:Users:michael:Documents:OCR PDF:OCR Erkennung:"

tell application "Finder"
set pdfListe to every file of folder quellOrdner whose kind is "Adobe PDF document"
end tell

Und wiederum nur die Namen:

Code
set quellOrdner to "Mac Mini:Users:michael:Documents:OCR PDF:" 
set zielOrdner to "Mac Mini:Users:michael:Documents:OCR PDF:OCR Erkennung:"

tell application "Finder"
set pdfListe to name of (every file of folder quellOrdner whose kind is "Adobe PDF document")
end tell

Und jetzt noch das Verschieben:

Code
set quellOrdner to "Mac Mini:Users:michael:Documents:OCR PDF:" 
set zielOrdner to "Mac Mini:Users:michael:Documents:OCR PDF:OCR Erkennung:"

try
tell application "Finder"
move (every file of folder quellOrdner whose kind is "Adobe PDF document") to zielOrdner
end tell
end try

Mit kind funktioniert es hier auch mit Windows-Dateien. Aber ob es alle Deine PDFs abdeckt, weiss ich nicht.

Gruss, Hans


als Antwort auf: [#451034]

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

10. Sep 2010, 10:47
Beitrag # 9 von 46
Beitrag ID: #451048
Bewertung:
(9990 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

vielen Dank für die ausführlichen Beschreibungen.
Endlich funktioniert das verschieben und habe das Script nun wie folgt:

Code
-- Modul Dateien verschieben ohne vorhandene Dateien zu überschreiben 
-- Version 0.0.7 Stand: 09.09.2010

-- Quell Verzeichnis (Ordner) auswählen aus dem die Dokumente kommen
set quellOrdner to (choose folder with prompt "Wähle den Quellordner") as Unicode text
-- Ziel Verzeichnis (Ordner) wählen wohin die Dateien verschoben werden sollen
set zielOrdner to (choose folder with prompt "Wähle den Zielordner für das verschieben der Dateien") as Unicode text

-- Alle PDF Dokument-Namen des Ouellordners in eine Liste schreiben
tell application "Finder"
-- set pdfListe to every file of folder quellOrdner whose kind is "Adobe PDF document"
set pdfListe to name of (every file of folder quellOrdner whose file type is "PDF ")
end tell

-- Anzahl der PDF Dateien herausfinden
set anzahlDateien to count pdfListe

repeat with pdfSchleife from 1 to anzahlDateien
set aktuellesDokument to item pdfSchleife of pdfListe

tell application "Finder"
if exists (file (zielOrdner & aktuellesDokument)) then
display dialog "Datei existiert"
-- die Datei ist schon vorhanden; also umbenennen und erst dann verschieben
else
--display dialog "Datei existiert noch nicht"
-- die Datei gibt es dort noch nicht, also verschieben
try
-- tell application "Finder" to move file (quellOrdner & aktuellesDokument) to folder zielOrdner
move file (quellOrdner & aktuellesDokument) to folder zielOrdner
end try
end if
end tell
end repeat


Was ich nun nicht verstehe, warum Du beim Move Befehl noch mal tell Application "Finder" to move geschrieben hast.
Diese Zeile war doch bereits in einem Tell Finder Block?
War bestimmt nicht nötig!

Jetzt mache ich mich mal an den Part des vergleichens und Umbenennung des Dokumentes.

Viele Grüsse

Michael


als Antwort auf: [#451035]

Dateien verschieben ohne vorhandene zu überschreiben

Hans Haesler
  
Beiträge gesamt: 5826

10. Sep 2010, 11:09
Beitrag # 10 von 46
Beitrag ID: #451050
Bewertung:
(9982 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

ja, stimmt. Beim Move-Befehl hast Du besser aufgepasst als ich. :-)

Doch wäre es besser, beim Vorhanden-sein-Prüfen den Finder nicht einzusetzen, sondern ...

Code
try 
alias (zielOrdner & aktuellesDokument)

Und noch etwas: Funktioniert bei Dir der Filter mit ... whose file type is "PDF " zuverlässig? Das heisst, werden alle PDF-Dateien erfasst?

Gruss, Hans


als Antwort auf: [#451048]

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

10. Sep 2010, 12:45
Beitrag # 11 von 46
Beitrag ID: #451073
Bewertung:
(9963 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

ja alle PDFs werden erfasst.

Muss aber dazu sagen dass ich nun mit dem Mini Leopard arbeite.
Den iMac musste ich gestern in die Reparatur geben.

Hat meinen Code nicht geschmeckt :)

Scherz beiseite.

Das werde ich später auf Snow Leopard testen.

Zur Zeit überlege ich mir wie ich eine Datei umbenenne!
Einen Physikalischen zugriff auf eine Datei habe ich ausser dem move Befehl noch nicht gehabt.

Code
-- Modul Dateien verschieben ohne vorhandene Dateien zu überschreiben 
-- Version 0.0.8 Stand: 09.09.2010

-- Quell Verzeichnis (Ordner) auswählen aus dem die Dokumente kommen
set quellOrdner to "System Mini:Users:michael:Documents:OCR Dateien:"
-- set quellOrdner to (choose folder with prompt "Wähle den Quellordner") as Unicode text
-- Ziel Verzeichnis (Ordner) wählen wohin die Dateien verschoben werden sollen
set zielOrdner to "System Mini:Users:michael:Documents:OCR Ablage:"
-- set zielOrdner to (choose folder with prompt "Wähle den Zielordner für das verschieben der Dateien") as Unicode text

-- Alle PDF Dokument-Namen des Ouellordners in eine Liste schreiben
tell application "Finder"
-- set pdfListe to every file of folder quellOrdner whose kind is "Adobe PDF document"
set pdfListe to name of (every file of folder quellOrdner whose file type is "PDF ")
end tell

-- Anzahl der PDF Dateien herausfinden
set anzahlDateien to count pdfListe

repeat with pdfSchleife from 1 to anzahlDateien
set aktuellesDokument to item pdfSchleife of pdfListe
tell application "Finder"
if exists (file (zielOrdner & aktuellesDokument)) then
-- Die Datei ist schon vorhanden
-- display dialog "Datei existiert"
-- Zerlegung der Textitems durch den Punkt "."
set AppleScript's text item delimiters to "."
set tempDokument to text items of aktuellesDokument -- Zerlege den Dateiname
-- Zerlegung der Textitems zurücksetzen
set AppleScript's text item delimiters to {""}
set tempDokument to reverse of tempDokument -- Anhang nach vorne bringen
set anHang to "." & item 1 of tempDokument -- speichere den Anhang
set tempDokument to rest of tempDokument -- Angang wegnehmen
set fZahl to 1 as string
if length of fZahl < 2 then
set fZahl to "0" & fZahl as text
end if

-- Datei umbenennen
set neuesDokument to tempDokument & " " & fZahl & anHang as text
set NeueDatei to zielOrdner & neuesDokument as alias
set aktuelleDatei to quellOrdner & aktuellesDokument as alias
-- display dialog aktuellesDokument
-- display dialog neuesDokument

tell application "Finder"
-- denke noch nach

end tell
(*
-- die Datei verschieben
tell application "Finder"
-- try
move file (quellOrdner & aktuellesDokument) to folder zielOrdner
-- end try
end tell *)
-- die Datei verschieben
else
--display dialog "Datei existiert noch nicht"
-- die Datei gibt es dort noch nicht, also verschieben
try
-- tell application "Finder" to move file (quellOrdner & aktuellesDokument) to folder zielOrdner
move file (quellOrdner & aktuellesDokument) to folder zielOrdner
end try
end if
end tell
end repeat


Wenn das hier läuft, dann über lege ich noch beim trennen des anhanges vom PDF eine zahl zu erkennen wenn vorhanden und diese um eins erhöht.

Viele Grüsse
Michael


als Antwort auf: [#451050]
(Dieser Beitrag wurde von michael m. am 10. Sep 2010, 13:40 geändert)

Dateien verschieben ohne vorhandene zu überschreiben

Hans Haesler
  
Beiträge gesamt: 5826

10. Sep 2010, 14:52
Beitrag # 12 von 46
Beitrag ID: #451091
Bewertung:
(9946 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

der Finder sollte nur eingesetzt werden, wenn es nicht anders geht. Zudem ist es nicht gut, einen umfangreichen (= mit vielen Zeilen) tell-app-Finder-Block zu definieren.

Empfehlung: Für den Test, ob die Datei schon existiert nich den Finder einsetzen, sondern die alias-Methode.

Beim Feststellen des Suffixes ist es nicht notwendig, die zerlegte Teile des Namens in eine Variable zu geben. Und die Reihenfolge umzukehren.

Mit text item -1 bekommst Du das letzte Element.

Code
set aktuellesDokument to "Deckenventilator.pdf" 
set AppleScript's text item delimiters to "."
set anHang to text item -1 of aktuellesDokument
set AppleScript's text item delimiters to {""}
anHang

Aber weil Du sicher bist, dass es alles PDF-Dateien sind (und alle das Suffix ".pdf" haben), könnte das Ermitteln des Namens viel einfacher sein. Und das Vorbereiten der einzufügenden Zahl kann ebenfalls vereinfacht werden:

Code
set aktuellesDokument to "Deckenventilator.pdf" 
set alterName to text 1 thru -5 of aktuellesDokument

set aZahl to 1
set fZahl to text -2 thru -1 of ("0" & aZahl)

set neuerName to alterName & " " & fZahl & ".pdf"

Schliesslich noch zum Umbenennen der Datei. Die Variable aktuellesDokument enthält nur den Namen. Uns sonst nichts. Wenn Du den Inhalt dieser Variable änderst, dann bleibt die Datei benannt, wie sie vorher war.

Damit sich der Name ändert, musst Du den Finder einsetzen. Du zeigst einen richtigen Ansatz: Die Referenz zur Datei muss ein Alias sein. Sonst kann sie der Finder nach dem Umbenennen nicht mehr zuordnen, wenn er sie verschieben soll.

Und noch etwas: Damit die Sache klarer wird, habe im im abschliessenden Snippet die Variablen geändert. aktuellerName (statt aktuellesDokument). Und aktuellesDokument wird für die Datei benutzt.

Damit es leichter nachvollziehbar ist, wird nachstehend nur die erste Datei der Liste umbenannt. Es gibt keine Schleife. Und keine Prüfung, ob die Datei schon existiert. Einfach nur als Demonstration, wie das Umbenennen läuft.

Code
set quellOrdner to "System Mini:Users:michael:Documents:OCR Dateien:" 
set zielOrdner to "System Mini:Users:michael:Documents:OCR Ablage:"

tell application "Finder"
set pdfListe to name of (every file of folder quellOrdner whose file type is "PDF ")
end tell

set aktuellerName to item 1 of pdfListe

set alterName to text 1 thru -5 of aktuellerName
set aZahl to 1
set fZahl to text -2 thru -1 of ("0" & aZahl)

set neuerName to alterName & " " & fZahl & ".pdf"

set aktuellesDokument to (quellOrdner & aktuellerName) as alias

tell application "Finder"
set name of aktuellesDokument to neuerName
end tell

Zum Ausprobieren eine einzige Datei mit einem einfachen Namen (ohne Nummer, ohne Kopie 2 ...) in den Quellordner geben. Funktioniert das?

Gruss, Hans


als Antwort auf: [#451073]

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

10. Sep 2010, 19:43
Beitrag # 13 von 46
Beitrag ID: #451134
Bewertung:
(9923 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

vielen Dank für die Ansätze.
Ich finde es gut dass Du mir nicht den gesamten Code lieferst.
Den ich möchte lernen wie das geht und selber probieren und habe auch ein tolles Gefühl, wenn ich sehe das ich auch etwas geschaffen habe.

Den Anhang in eine Variable zu setzen war der Gedanke, sollte ich das Script mal erweitern, so brauche ich diesen Teil nicht mehr zu verändern.

Du hast aber recht damit das es wirklich nur PDFs sind, denn das wird ja immer als Voraussetzung geprüft.

Sollte sich das mal ändern, dann muss ich eh alles prüfen.

Viele Grüsse
Michael


als Antwort auf: [#451091]

Dateien verschieben ohne vorhandene zu überschreiben

Hans Haesler
  
Beiträge gesamt: 5826

10. Sep 2010, 21:56
Beitrag # 14 von 46
Beitrag ID: #451141
Bewertung:
(9908 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

bitteschön.

Klar, dass ich das Script nicht pfannenfertig liefere. Du darfst ruhig beim Umsetzen etwas gefordert werden. Erst wenn Verzweiflung aufkommen sollte, werde ich versuchen, mehr Unterstützung zu bieten.

Hier noch eine Ergänzung.

Weil mit der Filterung ausschliesslich PDF-Dateien in die Liste gesetzt werden, ist man versucht, das Prüfen der Endung zu unterlassen.

Es könnte aber auch sein, dass eine Datei ohne Endung in der Liste steckt. Deshalb ist eine Prüfung angezeigt. Sonst würden Zeichen des Namens abgeschnitten.

Code
set curName to "test.pdf" 

if curName ends with ".pdf" then
set msg to "Das Suffix lautet \".pdf\""
else
set msg to "Der Dateiname endet nicht mit \".pdf\""
end if

Im ersten Fall kann der Name um vier Zeichen gekürzt werden. Im zweiten Fall ist die Endung nicht ".pdf". Dann muss der komplette Name übernommen werden. Daran die Nummer hängen und das Suffix ".pdf".

Falls Du morgen Samstag und am Sonntag nichts von mir hören wirst: Keine Panik! Meine Frau und ich fahren zur CountryNight in Gstaad: http://www.countrynight-gstaad.ch/

Zurück Sonntagabend.

Gruss, Hans


als Antwort auf: [#451134]

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

11. Sep 2010, 12:33
Beitrag # 15 von 46
Beitrag ID: #451152
Bewertung:
(9868 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

ich habe es jetzt geschafft.
Es funktioniert nun in meinem Script.
Lange habe ich Fehler gesucht und bin irgendwann darauf gekommen dass bei Set der erste Wert mit Pfad und der zweite Wert ohne Pfad zu definieren ist.

Weiter habe ich gelernt mit negativen Werten Text zu manipulieren.

Nicht nur repeat kenne ich jetzt ganz gut, sondern if, then, tell, try, set, move, count, choose.

Und das wichtigste ist, das ich mittlerweile Inhalte kontrollieren kann.

Am Kopf des Scriptes habe ich Kommentare eingegefügt.

Code
-- Modul Dateien verschieben ohne vorhandene Dateien zu überschreiben 
-- Version 0.0.10 Stand: 11.09.2010
-- Kommentar: Umbenennung von gleichen Dateien geht jetzt
-- Kommentar: verschieben der Dateien in den Ziel Ordner geht jetzt


Jetzt schreibe sogar kommentare hinzu, was ich zuletzt funktionierendes hinzugefügt habe.

Oder ich füge Kommentare hinzu welche Funktion ich zwar hinzu gefügt habe aber nocht teste, oder noch nicht reibungslos funktioniert.

Nochmals Vielen Dank

Da jetzt keine Duplikate mehr überschrieben werden, lasse ich das Script mal mit 100 Dateien PDFs laufen.

Nun überlege ich wie ich aus dem Dateinamen nach dem Abschneiden des Anhangs nun erkennen kann ob eine Zahl am ende des Dateinamens ist und wie viel stellen es sind.

Damit nicht "deckenventilator 1" nach "deckenventilator 1 01" wird. Oder "Beschreibung 23" nach "Beschreibung 23 01"

Ich hoffe Du hattest ein schönes Wetter bei Deinem Ausflug am Wochenende.

Viele Grüsse
Michael


als Antwort auf: [#451141]

Dateien verschieben ohne vorhandene zu überschreiben

Hans Haesler
  
Beiträge gesamt: 5826

12. Sep 2010, 21:20
Beitrag # 16 von 46
Beitrag ID: #451230
Bewertung:
(6253 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

ja, das Wetter war wirklich gut. Das ist dort oben eher selten, um diese Jahreszeit. Da können sich nach einem sonnigen Tag rasch Wolken auftürmen und dann schüttet es ergiebig. Das war dieses Jahr nicht der Fall.

Für die Lösung des Zahlen-Erkennungs-Problems lasse ich Dich erst mal tüfteln. :-)

Hier zunächst eine nähere Erklärung zum Bilden der numerierten Ergänzung. Nicht für Dich (denn das hast Du sicher verstanden), sondern für interessierte Mitleser.

Mit aZahl als Zahl ...

Code
set fZahl to text -2 thru -1 of ("0" & aZahl) 

... ist das Ergebnis immer eine Textkette von zwei Ziffern. Gleichgültig, ob die Zahl kleiner oder grösser als 10 ist. Das muss gar nicht erst getestet werden.

Denn mit text -2 thru -1 werden nur die beiden letzten Stellen zurückgegeben. Zuvor (Operationen in Klammern werden immer zuerst ausgeführt) wird immer die Null davorgesetzt und gleich darauf wird auf zwei Positionen beschnitten (von hinten her gezählt).

Das funktioniert gut mit Werten von 1 bis 99. Für die vorliegende Aufgabe wird das mehr als ausreichend sein.

Gruss, Hans


als Antwort auf: [#451152]

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

12. Sep 2010, 22:35
Beitrag # 17 von 46
Beitrag ID: #451231
Bewertung:
(6240 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

freut mich für Dein schönes Wochenende.

Ich wollte nun das Modul in mein Skript implementieren da habe ich nach langer Zeit festgestellt, dass einige Variablen abgleichen muss und einige nicht den gewünschten Inhalt haben.

Dann habe ich festgestellt, dass ich diese Routine dreimal benötige. Also ich denke es muss nun als Handler geschrieben werden mit If Sequenzen für die verschiedenen Verschiebungen.

Wenn es als Handler funktioniert, werde ich mich dann an die Tüftelei setzen um die Zahlen zu erkenne und hoch zu zählen.

Viele Grüsse
Michael


als Antwort auf: [#451230]

Dateien verschieben ohne vorhandene zu überschreiben

Hans Haesler
  
Beiträge gesamt: 5826

13. Sep 2010, 08:41
Beitrag # 18 von 46
Beitrag ID: #451237
Bewertung:
(6215 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

wenn Du den Wert von Variablen prüfen musst, dann verwendest Du ziemlich sicher das Anzeigen mithilfe von display dialog.

Es gibt noch eine andere Möglichkeit: Das Event-Protokoll benutzen. Dieses Fenster wird mit dem Menüartikel > Fenster > Verlauf des Eventprotokolls geöffnet (oder Option + Befehl + L).

Nach dem Starten des Scripts wird dort der Ablauf protokolliert. Zum Beispiel das Ergebnis von list folder. Der Wert der Variablen erscheint allerdings erst, wenn im Script eine entsprechende Zeile eingefügt wird. Der Befehl log, gefolgt vom Namen der Variablen. Zum Beispiel

Code
log fZahl 

Diese Zeilen sollten dann in der endgültigen Fassung des Scripts entfernt werden.

Gruss, Hans


als Antwort auf: [#451231]

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

13. Sep 2010, 14:04
Beitrag # 19 von 46
Beitrag ID: #451283
Bewertung:
(6188 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

vielen Dank für den Tipp mit dem Verlauf Event.
Das macht die Sache einfacher.
Ich benutze den display dialog Befehlt meist dann, wenn ich wissen möchte in welche Schleife das Skript geht.

Das Skript schein bald fertig zu sein, das glaube ich immer aber dann kommt immer wieder etwas neues.

Nach dem implementieren des Moduls verschieben ohne Überschreiben sind weitere Fehlerbehebungen aufgetreten.

Daher wurden einige PDFs nur umbenannt und nicht verschoben.
Und zwar wenn ein Dokument umbenannt worden ist hat es ja dann einen anderen Namen dieser muss jetzt noch einmal mit dem Ziel Verzeichnis geprüft werden, weil dieser Name ja auch vorhanden sein könnte. Und das ist bei meinen PDF Dateien sehr oft passiert. Ich musste das Skript 3-4 mal neu laufen lassen bis alle Dokumente abgearbeitet waren.

Also noch mal abfragen ob die neue Datei auch schon existiert nachdem diese verändert worden ist.
Hier muss wohl eine neue Schleife eingebracht werden, bis ein Dateinamen gefunden wurde der nicht identisch ist.

Ich glaube das mein Problem teilgelöst werden kann wenn ich mir jetzt Gedanken mache um die Umbenennung mit der hochgezählten Zahl am Ende des Dateinamens.

Gewisse Teile als Handler auszulagen da gab es auch ein paar Schwierigkeiten, obwohl ich mit der Handlerdefinition recht gut klar komme.

Das Skript wächst und wächst und wächst.
Ich hoffe nur das ich den Überblick nicht verliere.

Viele Grüsse

Michael


als Antwort auf: [#451237]
(Dieser Beitrag wurde von michael m. am 13. Sep 2010, 14:30 geändert)

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

14. Sep 2010, 01:02
Beitrag # 20 von 46
Beitrag ID: #451337
Bewertung:
(6157 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ich habe mir überlegt, wie man die Zahl hinter dem Dateinamen heraus bekommen kann, wenn überhaupt eine da ist.

Der Gedanke

Code
set aktuelleDatei to "2002 Schriftverkehr ohne OCR 01" 

set anZahl to count of aktuelleDatei
repeat with aZahl from 1 to anZahl
set bb to "-" & aZahl
-- display dialog bb
set Zeichen to (character bb of aktuelleDatei)
-- display dialog Zeichen
-- if zeichen eine Zahl then
-- speichere die Zahl
-- else
-- wenn Zeichen keine Zahl ist dann
-- gefundene Zeichen zusammensetzen
end repeat

-- von der aktuellen Datei die Zahl entfernen
-- gefundene Zahl um eins erhöhen
-- der aktuellen Datei die erhöhte Zahl zufügen
-- das PDF kurzel anhängen
-- Prüfen ob die Datei schon existiert
-- wenn nicht dann verschieben in zielverzeichnis
-- Wenn ja zurück zu Datei einlesen


Dann ist mir klar geworden das der Name ein Text ist.
Selbst wenn eine Zahl drin ist ist diese Text.
Wenn ich den in string umwandle mit "zeichen as string"
wird daraus eine Zahl die ich von text unterscheidn kann ??
Viele Grüsse

Michael


als Antwort auf: [#451283]

Dateien verschieben ohne vorhandene zu überschreiben

Hans Haesler
  
Beiträge gesamt: 5826

14. Sep 2010, 11:05
Beitrag # 21 von 46
Beitrag ID: #451384
Bewertung:
(6130 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

es wäre klarer, wenn Du mit den Variablen den Unterschied zwischen der Datei (= Pfad) und deren Name machen würdest.

Zum skizzierten Vorgehen. Es gilt ja, herauszufinden, ob am Ende des Dateinamens eine Zahl steht. Deshalb sollten die Zeichen vom Ende her untersucht werden. Sobald ein Zeichen keine Ziffer mehr ist, wird die Schleife verlassen.

Eine rückwärtslaufende Schleife, Test ob Ziffer oder nicht, laufend prüfen, ob der neue Name schon vergeben ist: Das alles ist nicht so einfach. Deshalb kommt hier ausnahmsweise eine fertige, mögliche Lösung.

Vieles ist kommentiert, einiges nicht, damit der Lerneffekt dennoch gross genug sein wird.

Die beiden Ordner werden nun als property definiert, damit sie im Handler, welcher das Vorhandensein der Dateien prüft, bekannt sind, ohne dass die Variablen übergeben werden müssen.

Code
property quellOrdner : "Mac Mini:Users:michael:Documents:OCR PDF:" 
property zielOrdner : "Mac Mini:Users:michael:Documents:OCR PDF:OCR Erkennung:"

-- der Dateiname
set aktuellerName to "2002 Schriftverkehr ohne OCR 01.pdf"

-- das Alias der Datei
set aktuellesDokument to (quellOrdner & aktuellerName) as alias

-- prüfen, ob diese Datei schon im Zielordner existiert
set istDort to checkFile(aktuellerName)

-- wenn diese Datei im Zielordner vorhanden ist ...
if istDort then
-- Suffix abschneiden
set alterName to text 1 thru -5 of aktuellerName
-- Zeichen zählen
set nChars to count alterName
-- Name an 'aText' übergeben (falls keine Zahl am Ende)
set aText to alterName
-- Zahlen-Variable initialisieren
set aZahl to ""

-- rückwärtslaufende Schleife durch den Namen
repeat with i from nChars to 1 by -1
-- prüfen, ob das Zeichen eine Ziffer ist
if character i of alterName is not in "0123456789" then
-- nur wenn der Zählerwert kleiner als die Anzahl Zeichen ist
if i is less than nChars then
set aText to text 1 thru i of alterName
set aZahl to text (i + 1) thru nChars of alterName
set nZahl to count aZahl
end if
exit repeat
end if
end repeat

-- Zahl hochzählen
-- wenn keine vorhanden, bei 1 beginnen
if aZahl is "" then
set ctr to 1
repeat while istDort
set fZahl to text -2 thru -1 of ("0" & ctr)
set neuerName to aText & " " & fZahl & ".pdf"
set istDort to checkFile(neuerName)
set ctr to ctr + 1
end repeat
-- die Datei umbenennen
try
tell application "Finder" to set name of aktuellesDokument to neuerName
end try
-- sonst, wenn Zahl vorhanden, diese umwandeln
else
set aZahl to (aZahl as integer) + 1
repeat while istDort
set fZahl to text -nZahl thru -1 of ("0000000" & aZahl)
set neuerName to aText & fZahl & ".pdf"
set istDort to checkFile(neuerName)
set aZahl to aZahl + 1
end repeat
-- die Datei umbenennen
try
tell application "Finder" to set name of aktuellesDokument to neuerName
end try
end if
end if

-- die Datei verschieben (ob umbenannt oder nicht)
try
tell application "Finder" to move file aktuellesDokument to folder zielOrdner
end try

on checkFile(aktuellerName)
try
alias (zielOrdner & aktuellerName)
return true
on error
return false
end try
end checkFile

Oben war von fertiger Lösung die Rede. Das stimmt nicht ganz. Denn es sollte nicht nur geprüft werden, ob die Datei istDort, sondern auch istHier ...

Und sollte nicht unterschieden werden, zwischen einer Ordnungszahl (welche man hochzählen darf) und einer Zahl, welche man besser unverändert lässt (eine Jahrzahl, eine Auftragsnummer usw)?

Gruss, Hans


als Antwort auf: [#451337]

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

17. Sep 2010, 11:00
Beitrag # 22 von 46
Beitrag ID: #451815
Bewertung:
(6080 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

vielen Dank für die Information.

Eine Schleife zu nehmen welche die Zahlen von hinten prüfen und wenn keine Zahl mehr da ist eine und dann die Prüfung abzubrechen war auch meine Idee.
Ist ja toll, das ich da mal einen richtigen Gedanken hatte, welches mit dem letzten Skriptfragment angedeutet hatte.

Voher prüfen und nachher prüfen das hatte ich auch schon mitbekommen und fest gestellt, das es nich gant so einfach wird.

Also ich setzt mich jetzt wieder dran und versuche das ganze zu komplettieren.

Viele Dank

Gruss
Michael


als Antwort auf: [#451384]

Dateien verschieben ohne vorhandene zu überschreiben

Hans Haesler
  
Beiträge gesamt: 5826

17. Sep 2010, 11:25
Beitrag # 23 von 46
Beitrag ID: #451819
Bewertung:
(6068 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

wir hatten uns schon Sorgen um Dich gemacht.

Bevor Du Dein Script komplettierst, solltest Du das zuletzt gepostete Script ausführen.

Als Vorbereitung die genannte Datei in den Quellordner legen. Und auch in den Zielordner. Und prüfen, ob es mit dem Erkennen der Zahl und dem Hochzählen klappt.

Und was geschieht, wenn im Zielordner schon die Zahlen 01 bis 05 vorhanden sind, aber die Quellordner-Datei mit einer "01" endet?

Und eine Variante mit einer Datei ohne Ziffern am Schluss des Namens. Wird die verschobene Datei mit einer Nummer versehen, wenn im Zielordner schon eine gleichnamige existiert?

Zudem wäre es gut, wenn Du den Code durchgehen würdest, und versuchen zu verstehen, was abläuft.

Gruss, Hans


als Antwort auf: [#451815]

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

17. Sep 2010, 11:45
Beitrag # 24 von 46
Beitrag ID: #451821
Bewertung:
(6063 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

in den letzten Tagen habe ich absichtlich den Mac nicht angerührt.
Das hat nichts damit zu tun, dass ich auf dem Mini ausweichen musste als den iMac 27 zoll sondern dass ich einfach nicht mehr klar war.

Die Fehler häuften und das mit ganz banalen Routinen.
Der Code verschlimmbersserte sich und es wollte gar nichts mehr.

Als Hausmann bin ich seit 6:00 Wach, mache die Kinder fertig, zur Schule, Haushalt, Baue am Haus und Apple Script.
Also Regelmässig bis 1:00 oder 2:00 in der Nacht.

Nachts stört mich halt keiner aber das hat seinen Preis.

Ich habe jetzt richtig rein gehauen um AS zu lernen, sonst würde das wieder so laufen wie 2008. Dort wollte ich diese Aufgabe schon mal erledigen und AS lernen, aber das wurde nichts.

Jetzt hänge ich mich richtig rein und will es auch bei behalten.

Ich habe mir schon mal dern Code von Dir angeschaut und muss sagen, das ich schon verstehe wie das laufen soll.
Aber testen und machen werde ich am Wochenende.
Nochmals vielen Dank

Das Endergebnis werde ich schon posten also bitte Geduld.

Viele Grüsse
Michael


als Antwort auf: [#451819]

Dateien verschieben ohne vorhandene zu überschreiben

Hans Haesler
  
Beiträge gesamt: 5826

17. Sep 2010, 12:08
Beitrag # 25 von 46
Beitrag ID: #451822
Bewertung:
(6051 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

volles Programm! Respekt!

[ Ich werde übers Wochenende offline sein. Zurück erst Montag Nachmittag. ]

Gruss, Hans


als Antwort auf: [#451821]

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

25. Sep 2010, 10:56
Beitrag # 26 von 46
Beitrag ID: #452397
Bewertung:
(5902 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

in den letzten Tagen habe ich endlich unsere Hartholzterasse alleine fertig gebaut. Nun bleibt endlich der ganze Kies und Schmutz draussen.

Heute habe ich von meiner Frau einen Familien freien Tag bekommen um die Photokina zu besuchen . Ich nutze diesen um nun endlich mit dem Skript weiter zu kommen. Die letzte Stunde habe ich genutzt um mich wieder einzuarbeiten.

Ich überlege ob ich das Skript Stück zur Prüfung und Umbennung als Handler einbaue.

Das Skript ist nun sehr sehr viel länger geworden als ich gedacht hätte und auf Prüfung und auf Datum oder Projektnummer am Dateinamenende, oje das nimmt ja scheinbar gar kein Ende.

Ich habe mir überlegt zum Schluss des Skripts ein paar Variablen zu definieren, die im Text auf vorhanden sein geprüft werden und wenn dies Zutrifft werden die Variablen gesetzt.

Das würde das Problem mit dem Datum am Ende und Projektnummern lösen.

Dabei kommt wieder mal eine Frage auf.
Kann man den Inhalt einer Variable wie z.B. Dokumentart als Liste (Schriftverkehr, Rechnung , ..... ) in eine Datei auf Festplatte schreiben und beim Ablauf des Skriptes die Dateninhalte von der Datei auf der Festplatte zu lesen.

Ja ich denke das Du denkst was soll das denn jetzt??
Wenn das Script fertig ist, brauche ich das nicht immer in den Variablen zu definieren, sondern kann die Skripteigenschaften der Variable ohne neu zu kompilieren einfach erweitern.

Viele Grüsse
Michael


als Antwort auf: [#451822]

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

25. Sep 2010, 12:38
Beitrag # 27 von 46
Beitrag ID: #452398
Bewertung:
(5889 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

bei der implemetierung in das Hauptscript habe ich festgestellt, das die Zielquelle nicht stimmt. Das muss ich noch korrigieren, aber dennoch weigert sich AS die Handler auszuführen.
Die Frage ist nur ob er das stoppt weil im Handler etwas nicht stimmt oder ob der Aufruf falsch ist?

Ich bin dabei dies heraus zu finden.

Viele Grüsse
Michael


als Antwort auf: [#452397]

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

25. Sep 2010, 15:41
Beitrag # 28 von 46
Beitrag ID: #452403
Bewertung:
(5872 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

ich habe jetzt das Skript als Handler für das HauptSkript getestet.

Es funktioniert soweit so gut:
Der ZielOrdner wurde in zielPfad umgeändert, da immer in diesem Pfad noch ein Ordner erzeugt wird und das ist dann der wirkliche zielOrdner.

Code
property quellOrdner : "Mac Mini:Users:michael:Documents:OCR Scans:" 
property zielPfad : "Mac Mini:Users:michael:Documents:OCR Ablage:"

-- der Dateiname ohne Pfad
set aktuellerName to "2002 Rechnung ohne OCR.pdf"

-- Pfadergänzung für ZielOrdner
property zielOrdner : zielPfad & "OCR Erkennung:"

-- Aufrufen des Handlers prüfen des Dateinamens
pruefeDateiName(aktuellerName)

-- Handler Bibliotheken

on pruefeDateiName(aktuellerName)
-- das Alias der Datei mit Pfad
set aktuellesDokument to (quellOrdner & aktuellerName) as alias

-- prüfen, ob diese Datei schon im Zielordner existiert
set istDort to pruefeDatei(aktuellerName)

-- wenn diese Datei im Zielordner vorhanden ist ...
if istDort then
-- Suffix abschneiden
set alterName to text 1 thru -5 of aktuellerName
-- Zeichen zählen
set nChars to count alterName
-- Name an 'aText' übergeben (falls keine Zahl am Ende)
set aText to alterName
-- Zahlen-Variable initialisieren
set aZahl to ""

-- rückwärtslaufende Schleife durch den Namen
repeat with i from nChars to 1 by -1
-- prüfen, ob das Zeichen eine Ziffer ist
if character i of alterName is not in "0123456789" then
-- nur wenn der Zählerwert kleiner als die Anzahl Zeichen ist
if i is less than nChars then
set aText to text 1 thru i of alterName
set aZahl to text (i + 1) thru nChars of alterName
set nZahl to count aZahl
end if
exit repeat
end if
end repeat

-- Zahl hochzählen
-- wenn keine vorhanden, bei 1 beginnen
if aZahl is "" then
set ctr to 1
repeat while istDort
set fZahl to text -2 thru -1 of ("0" & ctr)
set neuerName to aText & " " & fZahl & ".pdf"
set istDort to pruefeDatei(neuerName)
set ctr to ctr + 1
end repeat
-- die Datei umbenennen
try
tell application "Finder" to set name of aktuellesDokument to neuerName
end try
-- sonst, wenn Zahl vorhanden, diese umwandeln
else
set aZahl to (aZahl as integer) + 1
repeat while istDort
set fZahl to text -nZahl thru -1 of ("0000000" & aZahl)
set neuerName to aText & fZahl & ".pdf"
set istDort to pruefeDatei(neuerName)
set aZahl to aZahl + 1
end repeat
-- die Datei umbenennen
try
tell application "Finder" to set name of aktuellesDokument to neuerName
end try
end if
end if

-- die Datei verschieben (ob umbenannt oder nicht)
try
tell application "Finder" to move file aktuellesDokument to folder zielOrdner
end try
return {neuerName}
end pruefeDateiName


on pruefeDatei(aktuellerName)
try
alias (zielOrdner & aktuellerName)
return true
on error
return false
end try
end pruefeDatei


Bei den Abfragen wenn etwas zutrifft (if ... then) wollte ich den zielOrdner mit property vor dem Handler ergänzen

Code
if textBlock = "" then 
property zielOrdner:zielPfad&ocrEngine

aber ich fürchte das es in einer if Anweisung wohl nicht geht?
Zumindest hatte es bei mir nicht funktioniert.

Dann muss ich das wohl mit set machen und das in die Handler mit einbeziehen.

Viele Grüsse
Michael


als Antwort auf: [#452398]

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

25. Sep 2010, 16:37
Beitrag # 29 von 46
Beitrag ID: #452407
Bewertung:
(5863 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

also mit dem Code Schnipsel geht es nun in dieser Weise

Code
property quellOrdner : "Mac Mini:Users:michael:Documents:OCR Scans:" 
set zielPfad to "Mac Mini:Users:michael:Documents:OCR Ablage:"

-- der Dateiname ohne Pfad
set aktuellerName to "2002 Rechnung ohne OCR.pdf"

if aktuellerName contains "2002" then
-- Pfadergänzung für ZielOrdner
set zielOrdner to zielPfad & "OCR Erkennung:"
-- Aufrufen des Handlers prüfen des Dateinamens
pruefeDateiName(aktuellerName, zielOrdner)
end if


-- Handler Bibliotheken

on pruefeDateiName(aktuellerName, zielOrdner)
-- das Alias der Datei mit Pfad
set aktuellesDokument to (quellOrdner & aktuellerName) as alias

-- prüfen, ob diese Datei schon im Zielordner existiert
set istDort to pruefeDatei(aktuellerName, zielOrdner)

-- wenn diese Datei im Zielordner vorhanden ist ...
if istDort then
-- Suffix abschneiden
set alterName to text 1 thru -5 of aktuellerName
-- Zeichen zählen
set nChars to count alterName
-- Name an 'aText' übergeben (falls keine Zahl am Ende)
set aText to alterName
-- Zahlen-Variable initialisieren
set aZahl to ""

-- rückwärtslaufende Schleife durch den Namen
repeat with i from nChars to 1 by -1
-- prüfen, ob das Zeichen eine Ziffer ist
if character i of alterName is not in "0123456789" then
-- nur wenn der Zählerwert kleiner als die Anzahl Zeichen ist
if i is less than nChars then
set aText to text 1 thru i of alterName
set aZahl to text (i + 1) thru nChars of alterName
set nZahl to count aZahl
end if
exit repeat
end if
end repeat

-- Zahl hochzählen
-- wenn keine vorhanden, bei 1 beginnen
if aZahl is "" then
set ctr to 1
repeat while istDort
set fZahl to text -2 thru -1 of ("0" & ctr)
set neuerName to aText & " " & fZahl & ".pdf"
set istDort to pruefeDatei(neuerName, zielOrdner)
set ctr to ctr + 1
end repeat
-- die Datei umbenennen
try
tell application "Finder" to set name of aktuellesDokument to neuerName
end try
-- sonst, wenn Zahl vorhanden, diese umwandeln
else
set aZahl to (aZahl as integer) + 1
repeat while istDort
set fZahl to text -nZahl thru -1 of ("0000000" & aZahl)
set neuerName to aText & fZahl & ".pdf"
set istDort to pruefeDatei(neuerName, zielOrdner)
set aZahl to aZahl + 1
end repeat
-- die Datei umbenennen
try
tell application "Finder" to set name of aktuellesDokument to neuerName
end try
end if
end if

-- die Datei verschieben (ob umbenannt oder nicht)
try
tell application "Finder" to move file aktuellesDokument to folder zielOrdner
end try
return {neuerName}
end pruefeDateiName


on pruefeDatei(aktuellerName, zielOrdner)
try
alias (zielOrdner & aktuellerName)
return true
on error
return false
end try
end pruefeDatei


aber mit dem einpflegen in das Hauptskript klappt es nicht.

Viele Grüsse
Michael


als Antwort auf: [#451821]

Dateien verschieben ohne vorhandene zu überschreiben

Hans Haesler
  
Beiträge gesamt: 5826

27. Sep 2010, 09:11
Beitrag # 30 von 46
Beitrag ID: #452471
Bewertung:
(5809 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

ich war übers Wochenende abwesend. Deshalb kommt meine Antwort mit Verspätung.

Das Script, welches zeigt, wie geprüft wird, ob eine gleichnamige Datei schon existiert, dann die aktuelle umbenennt und verschiebt, kann nicht ohne Änderung in ein grösseres Script implementiert werden.

Idealerweise wird der Handler so angepasst, dass er aus verschiedenen Situationen aufgerufen werden kann. Also nur Zielordner und Dateiname übergeben. Im Handler wird geprüft, ob der Dateiname im Zielordner schon existiert. Der Name wird so lange geändert, bis dieser einzigartig ist. Und dieser neue Name wird zum Aufruf des Handlers zurückgeschickt.

Das Umbenennen und Verschieben der Datei wird dann gleich nach dem Aufruf des Prüf-Handlers vorgenommen.

Ich werde versuchen, das Hauptscript entsprechend einzurichten.

Gruss, Hans


als Antwort auf: [#452407]

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

27. Sep 2010, 14:48
Beitrag # 31 von 46
Beitrag ID: #452525
Bewertung:
(7300 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

mir war klar das ich das Script anpassen muss.
Das habe ich auch getan, aber wärend der der Anpassung sind Fehler aufgetreten, die ich nicht so richtig verstanden habe.
Das Skript stoppte immer bei aufruf eines Handlers.
Entweder das Prüfen der Datei oder das vergleichen Handler.

Vielen Dank
Michael


als Antwort auf: [#452471]

Dateien verschieben ohne vorhandene zu überschreiben

Hans Haesler
  
Beiträge gesamt: 5826

27. Sep 2010, 22:05
Beitrag # 32 von 46
Beitrag ID: #452579
Bewertung:
(7273 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

bitteschön.

Und? Werden jetzt die Handler ausgeführt? (Mit der Version, welche ich Dir geschickt habe.)

Was noch nicht gemacht ist:
1. Vor dem Umbenennen prüfen, ob nicht eine gleichnamige Datei im Quellordner ist.
Das scheint einfach zu sein. Kann aber unter Umständen recht knifflig werden.
Gegenmittel: Im Quellordner den Ordner "Warteraum" anlegen. Eine Datei, welche umbenannt werden muss, zuerst dort hinein verschieben. Dann muss man sich nicht mehr um die Namen im Quellordner kümmern.

2. Entscheiden, ob eine Zahl, welche sich am Ende des Dateinamens befindet, zum Hochzählen benutzt werden kann. Oder ob man sie besser unverändert lassen sollte.
Das wird schwierig sein. Wie kann man wissen, dass es sich um eine beliebige Ordnungszahl handelt? Und wenn es eine Seitenzahl ist? Oder ein Teil eines Datums?

Gruss, Hans


als Antwort auf: [#452525]

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

28. Sep 2010, 07:24
Beitrag # 33 von 46
Beitrag ID: #452601
Bewertung:
(7249 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

z Punkt 1 sprichst Du da ein Droplet an?
Also ein Überwachter Ordner, in dem alle Dateien liegen und in gewissen Abständen abgearbeitet wird!

Das habe ich mir vor einiger Zeit auch mal Überlegt als ich es im AS buch gelesen hatte. Ich wollte solche Änderungen aber erst durchführen, wenn das Skript fertiggestellt ist und funktioniert.

Zu Punkt 2 wollte ich eine Dateiart Überprüfung hinzufügen, in dem das Skirpt prüft ob es Schriftverkehr ist oder Rechnung usw. und von welchem Absender es ist. Danach wird der Dateinamen komplett neu geschrieben und nicht wie bisher geändert oder ergänzt. Weiterhin werden die Dateinamen geprüft und hochgezählt wenn duplikate vorhanden sein sollten.
Datum Rückwärts - Absender - Dateiart - Zähler

So sollte es in Zukunft keine Probleme geben.
Solltenach einer Rechnungsnummer gesucht werden, so wird dies im OCR Text gefunden werden.

Viele Grüsse

Michael


als Antwort auf: [#452579]

Dateien verschieben ohne vorhandene zu überschreiben

Hans Haesler
  
Beiträge gesamt: 5826

28. Sep 2010, 08:37
Beitrag # 34 von 46
Beitrag ID: #452606
Bewertung:
(7237 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

nein, kein Droplet.

Im Moment wird nur geprüft, ob eine identische Datei schon im Zielordner liegt. Logischerweise sollte man sich auch vergewissern, dass der Name, welchen man beim Umbenennen zuweisen will, im Quellordner noch nicht vorhanden ist. Sonst würde es eine Fehlermeldung geben. Welche durch den try-Wickel unterdrückt würde. Und die Datei würde nicht umbenannt werden.

Damit auf das Vergleichen mit den Namen im Quellordner verzichtet werden kann, dachte ich an den "Warteraum"-Ordner. Die Datei, welche umbenannt werden soll, in diesen Ordner verschieben. Dann muss man den Namen nur mit jenen der Zielordner-Dateien vergleichen. Wenn sich im Quellordner eine Datei mit demselben, zukünftigen Namen befindet, spielt das keine Rolle.

Das Herausfinden der Dateiart und – vor allem – des Absenders dürfte nicht ganz einfach sein ...

Gruss, Hans


als Antwort auf: [#452601]

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

28. Sep 2010, 08:38
Beitrag # 35 von 46
Beitrag ID: #452607
Bewertung:
(7236 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

du hattest mal gesgt, dass man den Finder nicht immer für Überprüfungen einsetzen soll und man es geschickter als Alias machen sollte.

Im Script habe ich folgende Zeile geprüft:

Code
-- aktuelleDatei als Alias definieren 
tell application "Finder"
set aktuelleDatei to (quellOrdner & aktuellerName) as alias
end tell


Den Finder als Tell Block nur aufrufen, wenn tatsächlich auf die Datei zugegriffen wird wie Name, Dateietikett, Spotlite Kommentar ändern?
Kann man nicht ohne Tell Block machen ??

Kann man dann das öffen der Datei

Code
open (quellOrdner & aktuellerName) -- Öffnen aktuelles Dokument 
open aktuelleDatei -- statt quellordner & aktuellerName


Viele Grüsse
Michael


als Antwort auf: [#452601]

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

28. Sep 2010, 09:02
Beitrag # 36 von 46
Beitrag ID: #452611
Bewertung:
(7223 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

Ich habe duplikate und nicht dunpilcate getestet und das Skript arbeitet sehr gut. Es benennt Dateien um wenn duplikate da sind und wenn es kein dulikat gibt verschiebt es die Datei.
Ich habe mal Dokument 01, Dokument 03 im zielVerzeichnis gehabt und es hat hervorragend Dokument 02 ergänzt.

Deshalb hatte ich nicht verstanden warum mit zielOrdner noch mal geprüft werden müsse. Das läuft doch in der Schleife?

Also den try Wickel mal als Kommentar kennzeichnen und sehen was passiert! Das mache ich.

Also als "Warteraum"-Ordner bezeichnest Du als einen weiteren Ordner als zwischenlager?
Verstehe ich nicht ganz! Die Dateien müssen doch mit dem ZielOrdner verglichen werden um zu sehen ob umbenannt werden muss oder nicht. Warum prüfen ob umbenennen und dann in einen Warteraum Ordner verschieben. Wenn dort umbenannt worden ist, muss doch mit dem ZielOrdner wieder geprüft werden ob der Dateiname dort schon existiert.

Das herausfinden der Dateiart sollte doch einfacher sein?
Das Datum aus dem Text heraus zu finden war doch wesentlich Schwieriger gewesen als ein paar Stichwörter aus einer Liste zu überprüfen.

Das werd ich erst in Angriff nehmen, wenn das Skript auf dem Ordnungsgemäss funktioniert.

Viele Grüsse
Michael


als Antwort auf: [#452606]

Dateien verschieben ohne vorhandene zu überschreiben

Hans Haesler
  
Beiträge gesamt: 5826

28. Sep 2010, 09:27
Beitrag # 37 von 46
Beitrag ID: #452613
Bewertung:
(7213 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

ja, den Finder sollte man nur einsetzen, wenn es nicht anders geht.

Zum Beispiel wird das Öffnen der aktuellen Datei durch "Skim" besorgt. Deshalb kann das Script dort unverändert bleiben.

Das Definieren der aktuellen Datei als Finder-Alias hat den Vorteil, dass die Datei nach dem Umbenennen problemlos verschoben werden kann. Mithilfe des Finders.

Gruss, Hans


als Antwort auf: [#452607]

Dateien verschieben ohne vorhandene zu überschreiben

Hans Haesler
  
Beiträge gesamt: 5826

28. Sep 2010, 09:29
Beitrag # 38 von 46
Beitrag ID: #452614
Bewertung:
(7212 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

wenn eine Datei umbenannt wird, dann liegt sie im Quellordner. Und wenn sich dort schon eine Datei befindet, welche den Namen hat, den man zuweisen will, dann geht das nicht.

Deshalb sollte auch ein Vorhandensein-Test mit den Dateien im Quellordner gemacht werden.

Versuche mal Folgendes:
– In den Zielordner die Datei "test 01.pdf" geben.
– Im Quellordner liegen die Dateien "test 01.pdf" und "test 02.pdf".
– Das Script starten.

Es stellt fest, dass im Zielordner schon die Datei "test 01.pdf" vorhanden ist. Deshalb will es die aktuelle Datei in "test 02.pdf" umbenennen. Das geht nicht, weil im Quellordner schon eine gleichnamige Datei liegt.

Man sollte deshalb prüfen, ob im Quellordner schon der zu vergebende Name vorhanden ist. Wenn ja, dann hochzählen. Und wieder mit dem Zielordner vergleichen. Falls dort der neue Name auch vorhanden ist, erneut hochzählen. Und mit dem Quellordner abgleichen usw. Theoretisch hört das nie auf.

Deshalb die Idee mit dem Warteraum. Bevor eine Datei umbenannt werden soll, wird sie in dieses Zwischenlager verschoben. Dann ist sie alleine dort. Und man kann ihr einen Namen zuweisen, auch wenn eine gleichnamige Datei schon im Quellordner liegt.

Gruss, Hans


als Antwort auf: [#452611]

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

28. Sep 2010, 10:01
Beitrag # 39 von 46
Beitrag ID: #452617
Bewertung:
(7188 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

also das mit den umbenennen kann ich nicht nachvollziehen.
Im zielOrdner befinden sich folgend Dokumente:

2002 Rechnung ohne OCR 01.pdf
2002 Rechnung ohne OCR 02.pdf
2002 Rechnung ohne OCR 03.pdf
2002 Rechnung ohne OCR 04.pdf
2002 Rechnung ohne OCR 05.pdf
2002 Rechnung ohne OCR 06.pdf
2002 Rechnung ohne OCR 07.pdf
2002 Rechnung ohne OCR 08.pdf
2002 Rechnung ohne OCR.pdf

Im quellOrdner:
2002 Rechnung ohne OCR.pdf

Nach ablauf des Skriptes wird es umbennant in
2002 Rechnung ohne OCR 09.pdf
und wird richtig verschoben.

Wenn ich folgende Datei Lösche:
2002 Rechnung ohne OCR 02.pdf

Dann wird im quellOrdner die Datei
2002 Rechnung ohne OCR.pdf

wieder zu
2002 Rechnung ohne OCR 02.pdf
und richtig verschoben.

Wenn ich im zielOrdner folgende Datei lösche
2002 Rechnung ohne OCR 06.pdf

und im qellOrdner fogelnde Datei habe:
2002 Rechnung ohne OCR 02.pdf

Dann wird diese zu
2002 Rechnung ohne OCR 06.pdf
richtig ins Zielverzeichnis verschoben.

Das ganze sogar mal mit auskommentierten try Wickel.

Alles funtkioniert mit Dokumenten ohne Text bestens.

Mit Text Dokumente mit richtigen Datum funktioniert es auch bestens.
Mit Text Dokumenten mit Text ohne Datum funktioniert es auch.

Soll der Warteraum eine optimierung sein oder eine funktionelle Vorgehensweise.
Scheint alles zu funktionieren!

Viele Grüsse
Michael


als Antwort auf: [#452614]
(Dieser Beitrag wurde von michael m. am 28. Sep 2010, 10:15 geändert)

Dateien verschieben ohne vorhandene zu überschreiben

Hans Haesler
  
Beiträge gesamt: 5826

28. Sep 2010, 10:38
Beitrag # 40 von 46
Beitrag ID: #452623
Bewertung:
(7172 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

ein Scripter sollte versuchen, an alle möglichen (und unmöglichen) Fehlerquellen zu denken und entsprechende Vorkehrungen zu treffen.

Auch wenn es unwahrscheinlich ist: Es könnte sein, dass im Quellordner mal eine Datei liegt, deren Name exakt jener ist, welcher einer anderen Datei zugewiesen werden sollte.

Und dann würde das Umbenennen nicht klappen. Nachvollziehbar mit meiner oben skizzierten Versuchsanordnung.

Aber wenn Du auf diese Vorsichtsmassnahme verzichten willst, kein Problem: Es könnten Tausende von Dateien behandelt werden, ohne dass je ein Konflikt auftreten würde. Doch sicher ist man nie.

Gruss, Hans


als Antwort auf: [#452617]

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

28. Sep 2010, 11:47
Beitrag # 41 von 46
Beitrag ID: #452627
Bewertung:
(7151 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

natürlich möchte ich auf der sicheren Seite sein und auch einen Schutz dafür vorsehen.
Nur wie kann man diese Situation testen bzw. provozieren?
Gleiche Dateinamen im quellOrdner zu haben wie im zielOrdner das hatte ich schon der Konflikt wurde gelöst.



Viele Grüsse
Michael


als Antwort auf: [#452623]
(Dieser Beitrag wurde von michael m. am 28. Sep 2010, 11:53 geändert)

Dateien verschieben ohne vorhandene zu überschreiben

Hans Haesler
  
Beiträge gesamt: 5826

28. Sep 2010, 11:54
Beitrag # 42 von 46
Beitrag ID: #452628
Bewertung:
(7147 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

die Anleitung zum Provozieren dieses Konflikts habe ich heute Morgen um 09.29 Uhr im Beitrag #38 gepostet.

Gruss, Hans


als Antwort auf: [#452627]

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

28. Sep 2010, 12:12
Beitrag # 43 von 46
Beitrag ID: #452629
Bewertung:
(7137 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

jetzt ist der Groschen gefallen.
Ich habs kapiert.
Also ein temporäres Verzeichnis in das die jeweilige Datei verschoben wird. Dort geprüft und umbenannt wird und dann in das zielVerzeichnis kommt.

Das wäre vielleicht die einfachste Methode.

Jetzt noch eine Frage zu den Properties mit Choose kompiniert.

Jedes mal wenn ich das Skript speichere fragt es nach den quell und ziel Verzeichnis?

Und wenn ich das als app generiere, dann fragt es vor dem speichern wo die Verzeichnisse sind. Beim Ausführen mit einem Doppleklick fragt das Skript nicht mehr nach und nimmt die wohl gespeichterten Pfade.

Gewollt wäre wenn man das Programm mit doppelklick startet, dass man dann die Verzeichnisse wählt und los gehts.

Viele Grüsse
Michael


als Antwort auf: [#452628]

Dateien verschieben ohne vorhandene zu überschreiben

Hans Haesler
  
Beiträge gesamt: 5826

28. Sep 2010, 14:46
Beitrag # 44 von 46
Beitrag ID: #452639
Bewertung:
(7117 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

ja, wenn Du property benutzest und die Ordner dabei mit choose folder wählen lässt, dann kommen beim Übersetzen des Scripts die Einladungen, die Ordner zu wählen.

Damit die Ordner in den Handlern bekannt sind, können die beiden Variablen als global (statt als property) definiert werden.

Code
-- zwei Variablen als 'global' definieren 
global quellOrdner
global zielOrdner

-- Auswahl des Quellordners
set quellOrdner to (choose folder with prompt "Wähle den Quellordner mit PDF-Dateien") as Unicode text
-- Auswahl des Zielordners
set zielOrdner to (choose folder with prompt "Wähle den Zielordner für die PDF-Dateien") as Unicode text

Jetzt kommen die Dialoge erst beim Starten des Scripts. Es ist allerdings nicht sehr benutzerfreundlich, wenn bei jeder Ausführung genau dieselben Ordner ausgewählt werden müssen.

Besser wäre, die Pfade fest im Script zu definieren. Danach aber prüfen, ob sie vorhanden sind. Wenn ja, geht die Ausführung weiter. Wenn nein, wird der Dialog zur Auswahl gezeigt.

Code
property quellOrdner : "Pfad:zum:Quellordner:" 
property zielOrdner : "Pfad:zum:Zielordner:"

try
alias quellOrdner
on error
set quellOrdner to (choose folder with prompt "Wähle den Quellordner mit PDF-Dateien") as Unicode text
end try

try
alias zielOrdner
on error
set zielOrdner to (choose folder with prompt "Wähle den Zielordner für die PDF-Dateien") as Unicode text
end try

Jetzt wieder mit property. Dadurch wird der aktuelle Pfad im Script gespeichert. Und wenn mal ein anderer Ordner benutzt werden soll, muss man vorgängig den alten Ordner umbenennen oder verschieben. Dann kommt der Dialog.

Gruss, Hans


als Antwort auf: [#452629]

Dateien verschieben ohne vorhandene zu überschreiben

TMA
Beiträge gesamt: 399

29. Sep 2010, 07:56
Beitrag # 45 von 46
Beitrag ID: #452678
Bewertung:
(7087 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
So,
nun möchte ich mal mit ein paar Handler aushelfen.

Also, ich persönlich finde es nicht gut, die Quelldatei im Quellordner umzubenennen (da es den neuen Namen ja schon geben kann) sondern direkt beim Kopieren umzubenennen. Der Finder bietet hier leider keine Möglichkeit. Deswegen benutze ich gerne die shell.

Zum kopieren:
Code
(* 
input parameters:
theSource=Path to file or folder as string (folder with trailing ":" copies only contents of Folder, without the folder itself)
theDest = path to destination folder or file as string
overWriteVar = Boolean overwrite an existing file or not
*)
on duplicateFileUnix(theSource, theDest, overWriteVar)
log ("*Duplicate File " & theSource & " to " & theDest as string)
try
if overWriteVar = false then
do shell script "cp -Rn " & (quoted form of (POSIX path of theSource)) & " " & (quoted form of (POSIX path of theDest))
else
do shell script "cp -R " & (quoted form of (POSIX path of theSource)) & " " & (quoted form of (POSIX path of theDest))
end if
tell application "Finder"
try
update alias (theDest as string)
end try
if theDest ends with ":" then
set tmpName to name of item (theSource as string) as string
if exists item (theDest & tmpName as string) then return true
else
if exists item (theDest as string) then return true
end if

end tell
return false
on error
return false
end try
end duplicateFileUnix


Wird "theDest" als Zielordner übergeben wird die Datei ohne Umbenennung kopiert. Enthält aber "theDest" den Zielordner + den neuen Dateinamen wird sie beim kopieren direkt mit umbenannt.

Zum prüfen ob eine Datei schon vorhanden ist, nehme ich diesen Handler, der "true" oder "false" zurückgibt:
Code
on checkFileExists(FileToCheckString) 
try
set thePath to quoted form of (POSIX path of FileToCheckString)
do shell script "test -f " & thePath
return true
on error
return false
end try
end checkFileExists


Und da ja von verschieben die Rede ist, und der "Kopierhandler" nur kopiert, muss die Quelldatei gelöscht werden. Dazu biete ich diesen Handler an:
Code
on deleteFileUnix(theFile) 
log ("*Delete File " & theFile)
try
do shell script "rm -f " & (quoted form of (POSIX path of theFile))
try
theFile as alias
return false
on error
return true
end try
on error
return false
end try
end deleteFileUnix


Ich hoffe ich konnte euch, sowie anderen ein bischen aushelfen.

Gruß
TMA


als Antwort auf: [#452639]

Dateien verschieben ohne vorhandene zu überschreiben

michael m.
Beiträge gesamt: 162

29. Sep 2010, 09:25
Beitrag # 46 von 46
Beitrag ID: #452685
Bewertung:
(1325 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo TMA,

schön das sich auch mal jemand anders dazu meldet und einen Beitrag gibt.

Das man Shell Befehle mit Applescript verbinden kann ist ja toll.
Da ich aber mit dem Skripten anfange und meine Vorkenntnisse 30 Jahre (Basic) zurück liegen fange ich praktisch bei null an und hatte weder Erfahrungen mit Apple Script noch mit der Shell.
Daher habe ich auch nur Apple Script vewendet um die Aufgaben zu lösen.

Weitere Sprachen wie die Shell und Objektive C werde ich in erwägung ziehen, wenn ich mich mit Apple Script sehr gut auskenne und auch die Erfahrungen richtig gefestigt habe.

Viele Grüsse
Michael


als Antwort auf: [#452678]
X

Aktuell

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
14.05.2024

Online
Dienstag, 14. Mai 2024, 10.00 - 10.30 Uhr

Webinar

Prozessoptimierung ist ein Teamsport! Keine Software und keine Maschine allein kann Ihnen helfen, die Effizienzpotenziale Ihres Betriebes maximal auszuschöpfen. Von der Auftragsannahme über die Vorstufe und den Druck bis hin zur Weiterverarbeitung – alles muss optimal ineinandergreifen. Apropos Weiterverarbeitung – in vielen Druckbetrieben fristet sie in Sachen Prozessoptimierung immer noch ein Schattendasein. Dabei liegen hier mittlerweile die größten Einsparpotenziale! In einem Webinar von Horizon und Impressed erfahren Sie, wie Sie diese Einsparungen realisieren können. Horizon, bekannt für innovative Lösungen in der Druckweiterverarbeitung, bietet mit iCE LiNK eine Workflowlösung für die Weiterverarbeitung. iCE LiNK überwacht, visualisiert und analysiert Produktionsabläufe und unterstützt bei der Wartung – damit immer alles reibungslos läuft. Den gleichen Anspruch hat der von Impressed entwickelte Impressed Workflow Server – er ist die smarte PDF-Workflow-Lösung für Druckereien, die Datenmanagement, Preflight und Produktionssteuerung übernimmt. Im Webinar zeigen Ihnen die Experten von Horizon und Impressed, wie beide Lösungen im Team die Effizienz und Produktivität Ihres Betriebes steigern können. Melden Sie sich am besten gleich an, wir freuen uns auf Sie! PS: Melden Sie sich in jedem Fall an – sollten Sie zum Termin verhindert sein, erhalten Sie die Aufzeichnung.

kostenlos

Ja

Organisator: Impressed / Horizon

https://www.impressed.de/schulung.php?c=sDetail&sid=327

Einsparpotenziale in der Weiterverarbeitung
Veranstaltungen
16.05.2024

Online
Donnerstag, 16. Mai 2024, 10.00 - 10.30 Uhr

Webinar

Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Günther Business Solutions und Impressed treten in einem Webinar den Gegenbeweis an. Experten beider Unternehmen zeigen, wie Großformatdrucker vom Einsatz zweier bewährter Lösungen profitieren können: • von advanter print+sign von Günther Business Solutions, dem ERP-System für den Großformatdruck, dass alle Phasen der Wertschöpfung im Large Format Printing abdeckt • von Impressed Workflow Server, der smarten PDF-Workflow-Lösung für Druckereien, die Datenmanagement, Preflight und Produktionssteuerung übernimmt Über die Kombination beider Lösungen können Großformatdrucker ihre Prozesse mit modernen Workflows Schritt für Schritt automatisieren – und so zügig deutliche Zeit- und Kosteneinsparungen realisieren. Das Webinar sollten Sie sich nicht entgehen lassen – damit Sie keine Effizienzpotenziale mehr liegen lassen. Melden Sie sich am besten gleich an, wir freuen uns auf Sie! PS: Melden Sie sich in jedem Fall an – sollten Sie zum Termin verhindert sein, erhalten Sie die Aufzeichnung.

kostenlos

Nein

Organisator: Impressed / Günther Business Solutions

https://www.impressed.de/schulung.php?c=sDetail&sid=326

Und es geht doch: Automatisierung im Großformatdruck!