[GastForen Programmierung/Entwicklung AppleScript über txt- / XML- oder Excel-File Dateien finden und kopieren

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

über txt- / XML- oder Excel-File Dateien finden und kopieren

Blissie
Beiträge gesamt: 106

4. Apr 2016, 09:26
Beitrag # 1 von 14
Bewertung:
(4944 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo liebe Helfer.
Folgendes Problem:
Ein Mitarbeiter liefert eine .txt-Datei mit ca. 10000 Dateinamen.
(Alternativ auch Excel- oder XML-File)
Nun sollen aus einem Ordner mit über 25000 EPS-Vektor-Dateien genau
diese gefunden und in einen neuen Ordner kopiert werden.
Idealerweise Suche auch in Unterordnern, aber nicht zwingend notwendig.
Hoffe sehr es hilft mir jemand. Dankeschön im Voraus.
X

über txt- / XML- oder Excel-File Dateien finden und kopieren

Hans Haesler
  
Beiträge gesamt: 5822

4. Apr 2016, 10:20
Beitrag # 2 von 14
Beitrag ID: #548537
Bewertung:
(4926 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Blissie,

eine äusserst happige Aufgabe ...

Eine txt-Datei ist okay (mit Excel oder XML wäre es komplizierter).
Für eine erste Lösung werde ich die Suche auf den Hauptordner beschränken.

Welches Mac OS X ist bei Dir im Einsatz?

Gruss, Hans


als Antwort auf: [#548535]

über txt- / XML- oder Excel-File Dateien finden und kopieren

Blissie
Beiträge gesamt: 106

4. Apr 2016, 10:51
Beitrag # 3 von 14
Beitrag ID: #548538
Bewertung:
(4897 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

Danke für deine Antwort.
Hauptordner ist völlig ok.

Mac OS X 10.6.8

Gruss Blissie


als Antwort auf: [#548537]

über txt- / XML- oder Excel-File Dateien finden und kopieren

Hans Haesler
  
Beiträge gesamt: 5822

4. Apr 2016, 11:33
Beitrag # 4 von 14
Beitrag ID: #548539
Bewertung:
(4877 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Blissie,

hier ein erster Versuch. Mit meinen 20 Dateien klappt es vorzüglich.
Für einen Test – ob es auch bei Dir funktioniert – bitte eine ähnliche Anzahl verwenden.

Code
(* 
DateienKopieren_02d.scpt
*)

-- die Textdatei wählen
set txtFile to choose file with prompt "Die Textdatei wählen"

-- den Quell- und den Zielordner wählen
set sourceFolder to choose folder with prompt "Den Quellordner wählen" as Unicode text
set targetFolder to choose folder with prompt "Den Zielordner wählen" as Unicode text

-- die Textdatei einlesen und die Absätze einer Liste zuweisen
set namesList to paragraphs of (read txtFile)
set nNames to count of namesList

-- eine Liste initialisieren
set notFoundList to {}

-- eine Schleife durch die Liste
repeat with n from 1 to nNames
set curName to item n of my namesList
-- sich vergewissern, dass der Name nicht leer ist
if curName is not "" then
set curFile to (sourceFolder & curName) as text
tell application "Finder"
try
duplicate curFile to folder targetFolder with replacing
on error
-- wenn nicht gefunden, den Namen an die Liste hängen
set end of notFoundList to curName
end try
end tell
end if
end repeat

-- die Anwenderin informieren
set nProb to count of notFoundList
if nProb is 0 then
display dialog "Alle Dateien sind kopiert." buttons "OK" default button 1 with icon 1
else
-- sonst die Logdatei definieren
set logPath to ((path to desktop as Unicode text) & "NotFound.txt") as string
set AppleScript's text item delimiters to return
set aString to every item of notFoundList as string
set AppleScript's text item delimiters to {""}
if nProb is 1 then
display dialog "Eine Datei nicht gefunden." buttons "OK" default button 1 with icon 2
else
display dialog "" & nProb & " Dateien nicht gefunden." buttons "OK" default button 1 with icon 2
end if
-- die Namen in die Logdatei schreiben
try
open for access file logPath with write permission
write aString to file logPath starting at 0
close access file logPath
on error
try
close access file logPath
end try
end try
end if

Die Namen nichtgefundener Dateien werden in die Log-Datei NotFound.txt auf dem Desktop geschrieben.

Gruss, Hans


als Antwort auf: [#548538]
(Dieser Beitrag wurde von Hans Haesler am 5. Apr 2016, 11:15 geändert)

über txt- / XML- oder Excel-File Dateien finden und kopieren

Blissie
Beiträge gesamt: 106

4. Apr 2016, 11:55
Beitrag # 5 von 14
Beitrag ID: #548541
Bewertung:
(4868 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

Super Sache. Von der Navigation her her echt toll.
Ganz dickes Dankeschön?
In der Zeit eine Lösung. Ich bin begeistert!!!


als Antwort auf: [#548539]

über txt- / XML- oder Excel-File Dateien finden und kopieren

Hans Haesler
  
Beiträge gesamt: 5822

4. Apr 2016, 12:25
Beitrag # 6 von 14
Beitrag ID: #548542
Bewertung:
(4843 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Blissie,

bitte sehr. Ich bedanke mich für Deine Rückmeldung und bin froh, dass es klappt.

Und wenn Du das Script auf die grosse Datei losgelassen hast, dann berichte uns doch bitte, was dabei herausgekommen ist.

Gruss, Hans


als Antwort auf: [#548541]

über txt- / XML- oder Excel-File Dateien finden und kopieren

Blissie
Beiträge gesamt: 106

5. Apr 2016, 08:43
Beitrag # 7 von 14
Beitrag ID: #548565
Bewertung:
(4649 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

hab das Script jetzt auf den 25000-Dateien Ordner losgelassen.
Die erste Euphorie ist leider etwas verflogen.

In der .txt stehen etwas über 8000 Dateinamen.
Nun passieren einige komische Dinge.

1. Nach Auswahl des Zielordners fängt er zwar an das Ziel zu füllen, gleichzeitig allerdings wird in den Zielordner der komplette Quellordner kopiert.
(Quelle Windows-Server -> Ziel Mac lokal)
Denk ich mir Ok. Schmeiß ich halt kurzfristig mal alle 25000 lokal auf die Platte. Nach 2000 gefundenen ist er dann plötzlich fertig. In der .log sind als nicht gefunden aber auch nur 1500.

2. Ok Dann nochmal von vorne. Die gefundenen 2000 wieder löschen.
Hab ja jetzt alle 25000 lokal. Also diesmal Quelle Lokal -> Ziel Lokal.
Sieht anfangs gut aus. Fängt an Ziel zu füllen. Plötzlich bei 2100 wird wieder der komplette Quellordner in den Zielordner kopiert. Geh auf Abrechen - Ordner löschen. Zielordner wird wieder weiter gefüllt. Dann bei 3275 wieder das gleiche. Wieder will er den kompletten Quellordner kopieren. Beim dritten mal, jetzt bei Datei 3275 ist das Skript abgelaufen. .log sagt 1000 nicht gefunden??? Wie gesagt .txt hat 8000 Dateinamen???

Irgendeine Idee Hans ?


als Antwort auf: [#548542]

über txt- / XML- oder Excel-File Dateien finden und kopieren

Hans Haesler
  
Beiträge gesamt: 5822

5. Apr 2016, 09:16
Beitrag # 8 von 14
Beitrag ID: #548567
Bewertung:
(4642 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Blissie,

schade, dass es nicht will ...

Wieso der gesamte Quellordner kopiert wird, kann ich mir nicht erklären.
Aber mit so langen Listen sind Probleme keine Überraschung.

Ich würde die Textdatei aufsplitten. Nicht mehr als 2000 Namen pro Teildatei.
Besser wären "nur" 1000. Und halt das Script entsprechend oft starten.

Hoffentlich wird es so keine Zwischenfälle mehr geben.

Gruss, Hans


als Antwort auf: [#548565]

über txt- / XML- oder Excel-File Dateien finden und kopieren

Blissie
Beiträge gesamt: 106

5. Apr 2016, 09:46
Beitrag # 9 von 14
Beitrag ID: #548568
Bewertung:
(4621 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Glaube ich hab was. Habe mir die .txt vom Kollegen nochmal genauer angesehen. Da tauchen immer wieder doppelte Dateinamen auf.
Deswegen verschluckt er sich bestimmt oder?
Müsste irgendwie alle Duplikate aus .txt entfernen. Krieg ich das automatisch? Und dann noch mal starten. Das wird es sein.


als Antwort auf: [#548567]

über txt- / XML- oder Excel-File Dateien finden und kopieren

Hans Haesler
  
Beiträge gesamt: 5822

5. Apr 2016, 10:00
Beitrag # 10 von 14
Beitrag ID: #548569
Bewertung:
(4610 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Blissie,

wenn ein Dateiname ein zweites Mal vorkommt, dann wird die Datei erneut kopiert
und überschreibt die bestehende. Das erzwingt der Zusatz 'with replacing'.

Das dürfte nicht die Ursache sein. Sondern die Monsterliste. Also nicht unbedingt
die Duplikate entfernen, sondern die Textdatei in mehrere kleinere zerlegen.

Gruss, Hans


als Antwort auf: [#548568]

über txt- / XML- oder Excel-File Dateien finden und kopieren

Blissie
Beiträge gesamt: 106

5. Apr 2016, 10:52
Beitrag # 11 von 14
Beitrag ID: #548571
Bewertung:
(4586 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Habe jetzt trotzdem mal die Duplikate entfernt. Geht ja ganz einfach mit Excel.
Die Probleme haben sich dadurch tatsächlich minimiert.
Sammelt alles sauber zusammen.
Nur einmal will er den Quellordner noch kopieren. Und zwar diesmal ganz am Ende. Nachdem er die letzte Datei kopiert hat kommt kein Stop. Breche ich kopieren des Quellordners ab ist er fertig. Hurra. Alle Dateien der .txt sind da

Das mit der Kopie des Quellordners wenn er eigentlich fertig ist stört da nur
wenig.

Habe jetzt auch noch mal eine Gegenprobe auf dem PC gemacht:
@echo off
cd S:\Quelle
for /F "delims=," %%i in Datei.txt) do copy %%i S:\Ziel

Findet genau die gleiche Anzahl.


als Antwort auf: [#548569]

über txt- / XML- oder Excel-File Dateien finden und kopieren

Hans Haesler
  
Beiträge gesamt: 5822

5. Apr 2016, 11:19
Beitrag # 12 von 14
Beitrag ID: #548573
Bewertung:
(4555 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Blissie,

ahhh ... gut, dass es jetzt funktioniert. Trotzdem :-) bin ich der Meinung, dass eine Textdatei
mit weniger Namen eine bessere Voraussetzung wäre.

Zum Problem mit dem Kopieren des ganzen Quellordners.
Jetzt habe ich den Code angeschaut und eine mögliche Ursache gefunden:
Wenn die letzte Zeile mit einem Return abgeschlossen wird, ergibt das einen leeren Absatz.
Dieser leere String wird an den Pfad des Quellordners gehängt.
Und deshalb ist das zu kopierende Objekt ... der Quellordner.

Dasselbe geschieht, wenn in der Textdatei eine Leerzeile eingefügt ist.

Die Abhilfe: Das Script vergewissert sich beim aktuellen Element der Liste dass es nicht leer ist.
Nur dann wird der Pfad zusammengesetzt und versucht, die Datei zu kopieren.

Den Code im Beitrag #4 habe ich entsprechend ergänzt.

Gruss, Hans


als Antwort auf: [#548571]

über txt- / XML- oder Excel-File Dateien finden und kopieren

Blissie
Beiträge gesamt: 106

6. Apr 2016, 09:55
Beitrag # 13 von 14
Beitrag ID: #548625
Bewertung:
(4462 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke Hans!

PERFEKT !!!


als Antwort auf: [#548573]

über txt- / XML- oder Excel-File Dateien finden und kopieren

Hans Haesler
  
Beiträge gesamt: 5822

8. Apr 2016, 10:46
Beitrag # 14 von 14
Beitrag ID: #548732
Bewertung:
(4313 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Blissie,

bitte sehr. Aber: Perfekt ist es nicht ...

Ich habe nun weitere Versuche gemacht:
– einen Quellordner mit 9963 ".jpg"-Dateien;
– eine Textdatei mit 8000 Namen;
– das Script gestartet;
– die Datei und die Ordner gewählt.

Das Kopieren ging anfänglich flott von sich. Aber dann zusehends langsamer.
Nach zwei Stunden versuchte ich das Script zu stoppen. Ging nicht.
Also den AppleScript-Editor zwangsbeenden. :-(

Im Zielordner waren immerhin 5033 Dateien angekommen.

Doch so geht es nicht. Und wenn die Dateien nur verschoben (statt kopiert) werden?
Neustart, damit die Ergebnisse nicht verfälscht werden.

Für den Vergleich eine Datei mit "nur" 500 Namen eingesetzt.
– Dateien kopieren: nach 70 Sekunden war die Aktion beendet. Neustart.
– Dateien verschieben: nur 55 Sekunden.

Eine neue Idee: Statt die Dateien einzeln zu verschieben, zuerst eine Liste der Pfade erzeugen lassen.
Und dann diese Liste dem Finder zum Verschieben übergeben. Neustart.

Das ist es! Die 500 Dateien waren nach nur vier Sekunden verschoben!
Neustart. Und jetzt die 8000 Dateinamen: Nach 27 Sekunden war die Aktion erfolgreich beendet.

Der leicht veränderte Code:

Code
(*  
DateienVerschieben_03d.scpt
*)

-- die Textdatei wählen
set txtFile to choose file with prompt "Die Textdatei wählen"

-- den Quell- und den Zielordner wählen
set sourceFolder to choose folder with prompt "Den Quellordner wählen" as Unicode text
set targetFolder to choose folder with prompt "Den Zielordner wählen" as Unicode text

-- die Textdatei einlesen und die Absätze einer Liste zuweisen
set namesList to paragraphs of (read txtFile)
set nNames to count of namesList

-- zwei Listen initialisieren
set defList to {}
set notFoundList to {}

-- eine Schleife durch die Liste
repeat with n from 1 to nNames
set curName to item n of my namesList
-- sich vergewissern, dass der Name nicht leer ist
if curName is not "" then
set curFile to (sourceFolder & curName) as text
tell application "Finder"
if exists curFile then
-- wenn die Datei vorhanden ist, den Pfad an die definitive Liste hängen
set end of defList to curFile
else
-- wenn nicht gefunden, den Namen an die Nicht-gefunden-Liste hängen
set end of notFoundList to curName
end if
end tell
end if
end repeat

-- die Dateien verschieben
if (count of defList) is not 0 then
try
tell application "Finder" to move defList to folder targetFolder with replacing
end try
end if

-- die Anwenderin informieren
set nProb to count of notFoundList
activate me
if nProb is 0 then
display dialog "Alle Dateien sind verschoben." buttons "OK" default button 1 with icon 1
else
-- sonst die Logdatei definieren
set logPath to ((path to desktop as Unicode text) & "NotFound.txt") as string
set AppleScript's text item delimiters to return
set aString to every item of notFoundList as string
set AppleScript's text item delimiters to {""}
if nProb is 1 then
display dialog "Eine Datei nicht gefunden." buttons "OK" default button 1 with icon 2
else
display dialog "" & nProb & " Dateien nicht gefunden." buttons "OK" default button 1 with icon 2
end if
-- die Namen in die Logdatei schreiben
try
open for access file logPath with write permission
write aString to file logPath starting at 0
close access file logPath
on error
try
close access file logPath
end try
end try
end if

Sollten sich mal die beiden Ordner nicht auf demselben Volume befinden, wird es dennoch funktionieren. Der Finder kopiert dann automatisch.

Gruss, Hans


als Antwort auf: [#548625]
X