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.
berndkuehn p
Beiträge: 5
1. Okt 2017, 20:42
Beitrag #1 von 7
Bewertung:
(1666 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Klausur aus Schülerordner(aus Klassenordner) in neu zu erstellenden Schülerordner (im Zielordner) kopieren


Hallo,

als Applescript-Rookie würde ich gerne folgendes Problem lösen:

Ich möchte jeweils die gleich benannte Datei (z. B. Klausur_1) aus einem Klassenordner mit n Schülerordnern kopieren und in einen neu gemachten Schülerordner im Zielordner kopieren.

Anders gesagt:

In einem Klassenlaufwerk befinden sich n Schülerordner, in denen sich jeweils die Klausurdatei (bei allen gleich benannt) befindet. Es sollen im Zielordner n Schülerordner generiert werden, in die
dann die jeweilige Klausurdatei hineinkopiert werden soll.
(Die Datei befindet sich jeweils in einem Schülerordner im Ordner "Documents". Den Ordner Documents zu finden gelingt denke ich auch!??? ..aber wie gesagt, das kopieren klappt nicht.

Was bereits funktioniert ist aus der Wahl des Klassenordners und des Zielordners die jeweiligen Unterordner zu generieren. (Die jeweiligen Unterordner im Schülerordner sollen nicht mit neu angelegt werden!)

Was ich absolut nicht hinbekomme, ist das kopieren der Datei in den (gerade neu angelegten) Schülerordner.

Daher mein Hilferuf!!!!

Es folgt mein Script, soweit ich es versucht habe... (im Händler openSubFolder versuche ich zu kopieren)

Mit hilfesuchenden Grüßen

Bernd Kühn


Code
global klausurname 
global folderCount
global target_folder
global name_schueler

-- NEUER TEIL --> Ordner lokal im Unterordner generieren aus den Ordnernamen der Schüler
--
set source_folder to choose folder with prompt "Ausgangsordner wählen:"
set target_folder to choose folder with prompt "Zielordner auswählen:"

with timeout of 300 seconds -- kann eventuell länger dauern...
try
tell application "Finder"
set folderCount to 0
set allItems to every item of source_folder

repeat with anItem in allItems

if class of anItem is folder then

set theName to name of anItem
set name_schueler to text of theName
set neuer_schueler_ordner to make new folder at target_folder with properties {name:name_schueler}

-- nun ist der Schülerordner erstellt
-- jetzt also die zu suchende Datei finden und den
-- Handler aufrufen, der sich um Unterordner kümmert...
--
my openSubFolder(anItem)
set folderCount to folderCount + 1

end if
end repeat
display dialog "Es wurden erfolgreich " & folderCount & " Ordner erstellt." buttons {"Is ja n'Ding..."} default button 1 with icon 1
-- display dialog "Die Datei \"" & klausurname & "\" ist erfolgreich in " & folderCount & " Ordner kopiert worden." buttons {"Is ja n'Ding..."} default button 1 with icon 1

end tell
on error
-- do nothing to skip the error
end try

end timeout

--
-- Handler, der die Unterordner bearbeitet:
--
on openSubFolder(aFolder)
try
tell application "Finder"
set curFold to (the name of aFolder)
set klausurname to "Klausur 1"
--
-- Wenn im Unterordner ein Ordner "Documents" enthalten ist ...
--
if curFold is "Documents" then

--
-- Kopiere Dateien in Schülerordner
--
duplicate file klausurname to folder neuer_schueler_ordner with replacing

end if
--
-- Wenn nicht, dann weitersuchen ...
--
set subItems to every item of aFolder
repeat with aSubItem in subItems
if class of aSubItem is folder then -- ist das Element im Unterordner ein weiterer Unterordner? Wenn ja, dann:
set currentFolder to (the name of aSubItem)
if currentFolder is "Documents" then
--
-- den Handler selbst erneut (rekursiv) aufrufen...
--
my openSubFolder(aSubItem)
end if
end if
end repeat
end tell
on error
-- do nothing to skip the error
end try
end openSubFolder

(Dieser Beitrag wurde von berndkuehn am 1. Okt 2017, 20:47 geändert)
Top
 
X
Hans Haesler  M  p
Beiträge: 5533
1. Okt 2017, 21:24
Beitrag #2 von 7
Beitrag ID: #559714
Bewertung:
(1661 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Klausur aus Schülerordner(aus Klassenordner) in neu zu erstellenden Schülerordner (im Zielordner) kopieren


Hallo Bernd.

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

Ich habe kurz versucht, das Problem nachzuvollziehen. Erfolglos, weil mir nicht klar ist, was genau geschehen soll.

Was enthält der Quellordner? Ordner, okay. Aber wie sind die benannt? Und was enthalten sie?
Wo befinden sich die zu kopierenden Dateien? Ist ihr Name wirklich nur "Klausur_1"? Ohne Suffix?

Gruss, Hans
als Antwort auf: [#559713] Top
 
berndkuehn p
Beiträge: 5
1. Okt 2017, 21:42
Beitrag #3 von 7
Beitrag ID: #559715
Bewertung:
(1656 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Klausur aus Schülerordner(aus Klassenordner) in neu zu erstellenden Schülerordner (im Zielordner) kopieren


Hallo Hans,

DANKESCHÖN fürs reinschauen!

Also der Quellordner ist ein Ordner einer Klasse. In diesem Ordner befinden sich n Schülerordner, in denen sich wiederum Ordner und Dateien befinden. Ich mal mal nen Baum...

Code
Klassenordner 
-> Ordner Schüler 1
--> Ordner Documents
--> Klausur 1.xlsx
-> Ordner Schüler 2
--> Ordner Bilder
--> Datei Test
--> Ordner Documents
--> Klausur 1.xlsx
...

-> Ordner Schüler n
--> Ordner Documents
--> Klausur 1.xlsx

ich hoffe, so ist es deutlicher erklärt?! In jedem Schülerordner können sich diverseste Dateien und Ordner befinden, ich bin aber nur am Ordner Documents interessiert, da in DIESEM Ordner meine gesuchte Datei befindet!

Hmmm... der Dateiname ist natürlich mit Suffix, ist aber nicht zu sehen. Korrekt muss er dann lauten "Klausur 1.xlsx"

Nochmals DANKE

Bernd
als Antwort auf: [#559714]
(Dieser Beitrag wurde von Hans Haesler am 2. Okt 2017, 21:00 geändert)
Top
 
Hans Haesler  M  p
Beiträge: 5533
1. Okt 2017, 22:52
Beitrag #4 von 7
Beitrag ID: #559716
Bewertung:
(1651 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Klausur aus Schülerordner(aus Klassenordner) in neu zu erstellenden Schülerordner (im Zielordner) kopieren


Hallo Bernd.

jetzt habe ich das Script zum Laufen gebracht. Und auch etwas optimiert.

Es werden direkt die Ordner aufgelistet. Dann ist es nicht mehr notwendig, die Art des Items zu prüfen.
Wenn sich der Ordner "Documents" immer auf der ersten Ebene des "Schülerordners befindet, kann das Finden der Datei vereinfacht werden.

Code
property klausurname : "Klausur 1.xlsx" 

-- NEUER TEIL --> Ordner lokal im Unterordner generieren aus den Ordnernamen der Schüler
--
set source_folder to choose folder with prompt "Ausgangsordner wählen:"
set target_folder to choose folder with prompt "Zielordner auswählen:"

with timeout of 300 seconds -- kann eventuell länger dauern...
tell application "Finder"
set folderCount to 0
set fileCount to 0

set allFolders to every folder of source_folder

repeat with curFolder in allFolders
set name_schueler to name of curFolder
try
set neuer_schueler_ordner to (make new folder at target_folder with properties {name:name_schueler}) as string
set folderCount to folderCount + 1

-- nun ist der Schülerordner erstellt
-- jetzt also die zu suchende Datei finden und in den Schülerordner kopieren
--
try
set docFolder to folder "Documents" of curFolder
duplicate file klausurname of docFolder to folder neuer_schueler_ordner
set fileCount to fileCount + 1
end try
end try
end repeat
display dialog "Es wurden erfolgreich " & folderCount & " Ordner erstellt." buttons ¬
{"Is ja n'Ding..."} default button 1 with icon 1
display dialog "" & fileCount & " Dateien \"" & klausurname & ¬
"\" sind erfolgreich kopiert worden." buttons {"Is ja n'Ding..."} default button 1 with icon 1
end tell
end timeout

Der try-Wickel ist verschoben. Jetzt verhindert er ein Problem, wenn im Zielordner schon ein gleichnamiger Ordner existiert.

Gruss, Hans
als Antwort auf: [#559715] Top
 
berndkuehn p
Beiträge: 5
2. Okt 2017, 18:02
Beitrag #5 von 7
Beitrag ID: #559740
Bewertung:
(1591 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Klausur aus Schülerordner(aus Klassenordner) in neu zu erstellenden Schülerordner (im Zielordner) kopieren


Hallo Hans,

ich bin schwer beeindruckt!!! Ganz Herzlichen Dank für deine Hilfe!
Das Script läuft nicht nur super, sondern ist auch viel übersichtlicher und auch ICH verstehe, was passiert.

.."etwas optimiert" ist stark untertrieben! Ich finde es sehr viel "schöner", da der ganze andere Ballast wegfällt.

Ich wusste bisher noch nicht, dass es "Properties" gibt und auch nicht, dass das Anlegen des neuen Ordners so elegant in einem
Rutsch möglich ist! Klasse!!!

Wo kann man das lernen? ... seufz

Jetzt werde ich noch probieren, den "property klausurname"n per choose einzulesen, so dass ich ihn nicht immer neu ins script eingeben muss.

Dir noch einmal ganz herzlichen Dank! Was kann ich dir Gutes dafür tun?

Lass es mich bitte wissen.

Herzliche Grüße

Bernd Kühn
als Antwort auf: [#559716]
(Dieser Beitrag wurde von Hans Haesler am 2. Okt 2017, 21:01 geändert)
Top
 
Hans Haesler  M  p
Beiträge: 5533
2. Okt 2017, 20:59
Beitrag #6 von 7
Beitrag ID: #559742
Bewertung:
(1572 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Klausur aus Schülerordner(aus Klassenordner) in neu zu erstellenden Schülerordner (im Zielordner) kopieren


Hallo Bernd,

bitte sehr. Doch ich habe eine Bitte: Nicht den ganzen Beitrag des Vorredners nochmals posten. Ich habe mir erlaubt, diese Abschnitte zu entfernen.

Der Unterschied zwischen 'global' und 'property':
– Mit 'global' kann eine Variable definiert werden, damit sie auch in einem Handler erkannt wird.
Aber: Man muss ihr zusätzlich einen Wert zuweisen. Der Fachausdruck dafür ist 'initialisieren':

Code
set klausurname to "Klausur 1" 

– Dank 'property' kann das auf einmal geschehen.

Doch wenn kein Handler aufgerufen wird, braucht es eigentlich weder 'global' noch 'property'. Das Initialisieren genügt.

Mit 'choose file' kann man das so machen:

Code
set curFile to choose file with prompt "Die zu kopierende Datei auswählen." 

tell application "Finder"
set klausurname to name of file curFile
end tell


Zitat Wo kann man das lernen? ... seufz

Es gibt Bücher, Foren, Beispiel-Scripts ...

Als ich 1994 damit anfing, gab es nur das Buch "The Complete AppleScript Handbook" von Danny Goodman. Dem Buch beigelegt war eine 3.5-Inch-Diskette, welche das AppleScript-Programm enthielt. Das musste man selber auf dem Mac installieren, weil damals noch nicht mitgeliefert ...

Zitat Was kann ich dir Gutes dafür tun?

Nun, eine Spende ans Forum wäre okay: http://www.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: [#559740] Top
 
berndkuehn p
Beiträge: 5
2. Okt 2017, 22:02
Beitrag #7 von 7
Beitrag ID: #559743
Bewertung:
(1564 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Klausur aus Schülerordner(aus Klassenordner) in neu zu erstellenden Schülerordner (im Zielordner) kopieren


Hallo Hans,

ich danke dir für deine zusätzlichen und hilfreichen Erläuterungen!

Die Spende ans Forum werde ich mit einer Vollmitgliedschaft umsetzten. Damit wird das Forum - so denke ich - doch auch unterstützt, nicht wahr? (davon hast du zwar nicht direkt etwas, aber wenn es ok für dich ist..)

Herzliche Grüße

Bernd
als Antwort auf: [#559742] Top
 
X