hilfdirselbst.ch
Facebook Twitter gamper-media
Mac OS X enthält verschiedene integrierte Werkzeuge und Technologien, mit denen sich gängige Aufgaben schnell und einfach automatisieren lassen.
ruediger77 p
Beiträge: 4
26. Feb 2017, 10:52
Beitrag #1 von 8
Bewertung:
(2905 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Dateien in Ordner sortieren


Hallo, da ich Applescript Anfänger bin, komme ich mit meinem Problem nicht weiter.
Meine Aufgabe Ich habe Dateien mit einer 7-stelligen Ziffer wobei die erste Ziffer die 5 ist (z.B 5001025) und eine Ordnerstruktur mit 250-Schritten (5000000-5000249, 5000250-499, usw). Die Dateien werden von einer Fräsmaschine z.B. 10 Stück auf einmal in einen "Verteilordner" gelegt und von dort aus sollen dann die Dateien, entweder über z.B.eine Ordneraktion oder 1x am Tag in die entsprechenden Ordner sortiert werden. Hierzu fehlt mir jegliche Idee und Wissen, deshalb würde ich mich sehr über eine Lösung freuen......
Einen ähnlichen Anwendungsfall hat "softikuss am 27.09-16 gelöst (Bilddateien in Ordner einordnen)
Seid gegrüßt Ruediger77
Top
 
X
Hans Haesler  M  p
Beiträge: 5482
26. Feb 2017, 11:52
Beitrag #2 von 8
Beitrag ID: #555903
Bewertung:
(2889 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Dateien in Ordner sortieren


Hallo Ruediger,

herzlich willkommen im AppleScript-Forum auf HilfDirSelbst! :-)

Angenommen, die Ordnernamen haben 15 Zeichen: 5000000-5000249 (und nicht nur elf: 5000250-499).
Dann wäre die Ordnerstruktur so:

Code
5000000-5000249 
5000250-5000499
5000500-5000749
5000750-5000999
5001000-5001249
5001250-5001499
5001500-5001749
usw.

Und die Beispieldatei, deren Name mit 5001025 beginnt, müsste in den fünften Ordner verschoben werden.

Welches Suffix haben die Dateien?

Die Aufgabe ist nicht so einfach. Und vor heute Abend kann ich nicht versuchen, eine Lösung zu finden.

Gruss, Hans
als Antwort auf: [#555901] Top
 
ruediger77 p
Beiträge: 4
26. Feb 2017, 12:23
Beitrag #3 von 8
Beitrag ID: #555904
Bewertung:
(2878 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Dateien in Ordner sortieren


Hallo Hans, besten dank für die rasche Antwort
Die von dir genannte Ordnerstruktur (Ordnernamen) ist völlig in Ordnung....
5000000-5000249
5000250-5000499
5000500-5000749
5000750-5000999
5001000-5001249
und die Beispieldatei, deren Name mit 5001025 beginnt, würde in den fünften Ordner verschoben werden.
Süffix:
Die Dateien heißen komplett z.B.
5010128A.MPF
das A am Ende der Datei kann durch die Buchstaben B-H von der Fräschmaschine ersetzt werden (bedeutet verschiedene Aufspannungen des Werkstücks).......soll aber in den gleichen Ordner wie 5010128A.MPF verschoben werden, die komplette Anzahl der Zahlen/Buchstaben ist aber immer gleich (mit Suffix und Punkt = 13)

Das dies eine "harte" Nuß ist, ahne ich selbst mit meinen rudimetären Kenntnissen...

nur noch zur Info, auf dem MacServer läuft noch MacOSX 10.9

Hab Dank
Gruß Rüdiger
als Antwort auf: [#555903] Top
 
Hans Haesler  M  p
Beiträge: 5482
26. Feb 2017, 22:12
Beitrag #4 von 8
Beitrag ID: #555908
Bewertung:
(2826 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Dateien in Ordner sortieren


Hallo Rüdiger,

der nachfolgende Code als Programm gespeichert, ergibt ein Droplet.
Auf dessen Icon kann man einen Ordner ziehen. Oder einzelne oder mehrere Dateien.

Das Script setzt den Namen des Ziel-Ordners zusammen und verschiebt die aktuelle Datei in diesen Ordner.
Getestet mit Dateinamen von "5000000A.MPF" bis "5999999H.MPF".

Bei der ersten Ausführung muss der Hauptordner, welcher all die Unterordner enthält, gewählt werden.
Wenn im gewählten Hauptordner ein Zielordner nicht vorhanden ist, wird er erzeugt.

Code
(*   
DateienVerschieben_03d.app
Dieses Script verschiebt Dateien in entsprechende Ordner des Hauptordners
aufgrund der sieben Ziffern zu Beginn der Datei-Namen
© 27.02.17 / Hans Haesler, Châtelard 52, CH-1018 Lausanne
*)

property mainFolder : ""
global probCtr

-- einen Dialog zeigen, falls der Anwender einen Doppelklick auf das Droplet macht
on run
display dialog "Den Ordner auf dem Icon
dieses Droplets deponieren." buttons "OK" default button 1 with icon 0
end run

-- der 'open handler', welcher auf das Fallenlassen von Objekten reagiert
on open allObjects
-- den Hauptordnerpfad prüfen
tell application "Finder"
-- auswählen lassen falls nicht vorhanden
if not (exists mainFolder) then
set mainFolder to my defineFolder()
end if
end tell
set probCtr to 0
-- Wiederholschleife, welche die gedroppten Objekte zum Handler 'processObject' schickt
repeat with aObject in allObjects
processObject(aObject)
end repeat
-- den Anwender informieren
activate me
if probCtr is 0 then
display dialog "Fertig." buttons "OK" default button 1 with icon 1 giving up after 1
else if probCtr is 1 then
display dialog "Eine Datei nicht verschoben." buttons "OK" default button 1 with icon 2
else if probCtr is greater than 1 then
display dialog "" & probCtr & " Dateien nicht verschoben." buttons "OK" default button 1 with icon 2
end if
end open

-- der Handler zur Wahl des Hauptordners
on defineFolder()
activate me
set newFolder to (choose folder) as Unicode text
return newFolder
end defineFolder

-- im folgenden Handler wird festgestellt, ob das Objekt ein Ordner oder eine Datei ist;
-- der Inhalt des Hauptordners wird aufgelistet; Dateien werden zum Handler 'processFile' gesandt.
on processObject(aObject)
-- wenn der Pfad mit einem Doppelpunkt endet, ist das Objekt ein Ordner
if (aObject as string) ends with ":" then
-- die Liste des Inhalts wird erstellt
tell application "System Events"
set contentsList to name of every file of folder (aObject as Unicode text)
end tell
-- die Wiederholschleife schickt die Dateien zum Handler 'processFile'
repeat with curItem in contentsList
set objPath to ((aObject as Unicode text) & curItem)
-- unsichtbare Dateien ausschliessen
if not (curItem starts with ".") then
-- Dateipfad und Name senden
if (count of curItem) is greater than 11 then
processFile(objPath as alias, curItem)
end if
end if
end repeat
-- wenn das Objekt eine Datei ist ...
else
tell application "Finder"
-- der Name der Datei ...
set fullName to name of file aObject
end tell
-- ... wird der Pfad und der Dateiname dem Handler 'processFile' übergeben
processFile(aObject, fullName)
end if
end processObject

-- die aktuelle Datei behandeln
on processFile(aObject, fullName)
-- die sieben Zeichen aus dem Dateinamen ziehen
try
set curNum to (text 1 thru 7 of fullName) as integer
on error
set probCtr to probCtr + 1
return
end try

-- den Ordnernamen errechnen und zusammensetzen
set tmpVal to (curNum div 250) - 20000
set firstVal to 5000000 + (tmpVal * 250)
set secondVal to firstVal + 249
set folName to (firstVal & "-" & secondVal) as string

-- und auch den vollen Pfad zum Unterordner
set curFolder to (mainFolder & folName) as string

tell application "Finder"
-- wenn der Ordner vorhanden ist ...
if (exists curFolder) then
-- ... versuchen, die aktuelle Datei hineinzuverschieben
try
move file aObject to curFolder with replacing
end try
else
-- sonst den Ordner zuerst erzeugen ...
set curFolder to make new folder at folder mainFolder with properties {name:folName}
-- ... und dann die Datei verschieben
try
move file aObject to curFolder with replacing
end try
end if
end tell
end processFile

Ich habe Dir das Script als Droplet gespeichert per PM zugestellt. Möglicherweise musst Du es erneut abspeichern.

Gruss, Hans
als Antwort auf: [#555904]
(Dieser Beitrag wurde von Hans Haesler am 27. Feb 2017, 09:46 geändert)
Top
 
ruediger77 p
Beiträge: 4
27. Feb 2017, 05:14
Beitrag #5 von 8
Beitrag ID: #555910
Bewertung:
(2765 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Dateien in Ordner sortieren


Hallo Hans, zuallererst einmal ein herzliches -Dankeschön-
für deine Arbeit, wie ich es dir tatsächlich danken kann weiß ich nicht, falls es da eine Möglichkeit gibt, sag mir bitte Bescheid.
Ich werde das script heute abend oder morgen testen können und gebe dir dann nochmals ein feedback........lass dir`s gut gehen, das wünsche ich dir
Gruß Rüdiger
als Antwort auf: [#555908] Top
 
Hans Haesler  M  p
Beiträge: 5482
27. Feb 2017, 09:51
Beitrag #6 von 8
Beitrag ID: #555913
Bewertung:
(2700 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Dateien in Ordner sortieren


Hallo Rüdiger,

bitte sehr.

Ich habe gestern nicht geprüft, was geschieht, wenn die erste Ziffer des Dateinamens eine 6 oder eine 4 ist.

Diese Tests habe ich nun nachgeholt. Ergebnis: kein Problem. Die entsprechenden Ordner werden erzeugt und die Dateien verschoben.

Die Zeilen, welche den Namen des Zielordners errechnen und zusammensetzen ...

Code
set tmpVal to (curNum div 250) - 20000 
set firstVal to 5000000 + (tmpVal * 250)
set secondVal to firstVal + 249
set folName to (firstVal & "-" & secondVal) as string

... funktionieren mit Dateinamen von "1000000A.MPF" bis "9999999H.MPF".

Wenn aber die sieben ersten Zeichen eines Dateinamens nicht in eine Ganzzahl verwandelt werden können, geht das Script kommentarlos zur nächsten Datei über. Der Benutzer sieht zwar, welche Dateien nicht verschoben wurden. Aber es fehlt eine Meldung.

Deshalb habe ich das obenstehende Script ergänzt und im Code einen Problemzähler eingefügt. Das Droplet sende ich Dir per PM zu.

Zitat (...) falls es da eine Möglichkeit gibt, sag mir bitte Bescheid.

Eine Möglichkeit ist eine Spende ans Forum: http://hilfdirselbst.org/...amp;read_category=31

Davon bekomme ich allerdings keinen Cent. Im Gegenteil: Ich spende selber jedes Jahr CHF 100.–
Doch das ist es mir wert, allein schon, weil das Forum ein wertvolles "Nachschlagewerk" ist.

Gruss, Hans
als Antwort auf: [#555910] Top
 
Hans Haesler  M  p
Beiträge: 5482
3. Mär 2017, 19:15
Beitrag #7 von 8
Beitrag ID: #556050
Bewertung:
(2487 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Dateien in Ordner sortieren


Hallo Rüdiger,

erst jetzt bemerkt: Dein Pseudo ist mit einem "p" versehen.
Offensichtlich hat es mit der Überweisung geklappt.
Das ist vorbildlich und ... nachahmenswert.

Herzlichen Dank!

Gruss, Hans
als Antwort auf: [#555910] Top
 
NEU!
Beiträge: 161
11. Apr 2017, 14:58
Beitrag #8 von 8
Beitrag ID: #556967
Bewertung:
(2205 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Dateien in Ordner sortieren


Moin!

Ohne das Script genau zu prüfen… Eine Problematik ist mir gekommen, als ich das selbe für unser Fotoarchiv per AS frickeln wollte:

Was, wenn es das Zieöl schon gibt (Käme der Fall überhaupt vor?)?

move myFile to ServerTarget with replacing

Lustigerweise hat unser Fotostudio Dateinamen doppelt vergeben, bis ich das erstmal rausgefunden habe…
Jedenfalls sollte euer Script noch prüfen, ob die Datei existiert. Wenn ja, die Datei ans Ende eine Liste stellen und danach per Dialog fragen, was mit diesen Daten passieren soll. Bei mir kann man entweder einen Zeitstempel wählen, oder den Dateinamen um einen abgefragten String ergänzen, zB "File1234_SHOOTING120217.psd".

Und während des verschiebens noch ein bisschen Spielerei anstatt einer Progressbar?

display notification "Datei " & CurrentCounter & " von " & length of myFiles & " verarbeitet" with title "" & name of myFiles[j] subtitle "…/" & TruncedPath & "/"

und noch ein paar Spielerein?

set myOperator to system info
set myUser to short user name of myOperator
if myUser = "mm123456" then set myUser to "Max Mustermann"


Und am Ende vielleicht noch die Zeit fürs Einsortieren?

irgendwo am Anfang:
set startTime to (get current date)

und am Ende nachm Verschieben:
set endTime to (get current date)
set duration to endTime - startTime
set mins to duration div minutes
set secs to duration mod minutes
als Antwort auf: [#556050]
(Dieser Beitrag wurde von NEU! am 11. Apr 2017, 15:06 geändert)
Top
 
X