Connect failed: Connection timed out

[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:
(10154 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:
(10122 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:
(10094 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:
(10080 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:
(10068 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:
(10035 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:
(10019 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:
(10011 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:
(9985 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:
(9977 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:
(9958 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:
(9941 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:
(9918 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:
(9903 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:
(9863 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]
X