mirror of
https://gitlab.com/harald.mueller/aktuelle.kurse.git
synced 2024-11-27 20:21:56 +01:00
muh
This commit is contained in:
parent
288f3d765f
commit
f21bb8700d
@ -1,72 +0,0 @@
|
|||||||
# M122 - Übungen
|
|
||||||
|
|
||||||
## Dateien und Verzeichnisse anlegen
|
|
||||||
|
|
||||||
Ich habe den Bedarf, für alle Lernenden einer Klasse dieselben
|
|
||||||
Dateien zur Verfügung zu stellen. Ich bereite mich so vor, dass
|
|
||||||
ich eine Liste mit allen Namen habe. Weiter werde ich ein
|
|
||||||
Directory namens "_template" bereitstellen, das die Dateien
|
|
||||||
enthält, die ich in alle Lernenden-Verzeichnisse hineinkopieren
|
|
||||||
will.
|
|
||||||
|
|
||||||
Es gibt mehrere Klassen. Die Lernenden bekommen alle ein eigenes
|
|
||||||
Verzeichnisse. und jede Klasse bekommt ein Verzeichnis, in dem die
|
|
||||||
Lernenden-Verzeichnisse gesammelt sind. In jedem dieser Lernenden-Verzeichnisse
|
|
||||||
sind dann die zur Verfügung gestellten Dateien enthalten.
|
|
||||||
|
|
||||||
|
|
||||||
Damit es bei der Anwendung am Schluss nicht all zu viel Aufwand
|
|
||||||
gibt, mache ich die Liste der Lernenden einer Klasse in eine Datei,
|
|
||||||
die schon mit dem Namen der Klasse (und des Moduls) in der Art z.B.
|
|
||||||
M122-AP22b.txt angelegt ist. Das automatisierte Skript muss dann
|
|
||||||
"nur" noch den Dateinamen vor dem Punkt auslesen um damit dann
|
|
||||||
das Grundverzeichnis anzulegen wo dann dort hinein die
|
|
||||||
Lernenden-Verzeichnisse angelegt werden. Dort hinen, in den
|
|
||||||
Klassen- und den Lernenden-Verzeichnissen, kommen dann die
|
|
||||||
bereitgelegten Dateien.
|
|
||||||
|
|
||||||
|
|
||||||
Erstellen Sie folgende Datei- und Verzeichnisstruktur
|
|
||||||
|
|
||||||
./M122-AP22b.txt
|
|
||||||
|
|
||||||
./_template
|
|
||||||
Datei-1.txt
|
|
||||||
Datei-2.docx
|
|
||||||
Datei-3.pdf
|
|
||||||
|
|
||||||
|
|
||||||
Der Inhalt der M122-AP22b.txt Datei könnte so aussehen:
|
|
||||||
|
|
||||||
Amherd
|
|
||||||
Baume
|
|
||||||
Berset
|
|
||||||
Cassis
|
|
||||||
Keller
|
|
||||||
Parmelin
|
|
||||||
Roesti
|
|
||||||
|
|
||||||
|
|
||||||
Es soll nachher eine solche Struktur entstehen:
|
|
||||||
|
|
||||||
./M122-AP22b
|
|
||||||
Amherd
|
|
||||||
Datei-1.txt
|
|
||||||
Datei-2.docx
|
|
||||||
Datei-3.pdf
|
|
||||||
Baume
|
|
||||||
Datei-1.txt
|
|
||||||
Datei-2.docx
|
|
||||||
Datei-3.pdf
|
|
||||||
Berset
|
|
||||||
Datei-1.txt
|
|
||||||
Datei-2.docx
|
|
||||||
Datei-3.pdf
|
|
||||||
|
|
||||||
usw.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Erstellen Sie ein Skript, das diese Aufgabe erledigt.
|
|
91
m122/uebungen/verzeichnisse-und-dateien-anlegen/README.md
Normal file
91
m122/uebungen/verzeichnisse-und-dateien-anlegen/README.md
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
# M122 - Übungen
|
||||||
|
|
||||||
|
## Dateien und Verzeichnisse anlegen
|
||||||
|
|
||||||
|
Ich habe den Bedarf, für alle Lernenden einer Klasse dieselben
|
||||||
|
Dateien zur Verfügung zu stellen. Es gibt mehrere Klassen. Die
|
||||||
|
Lernenden bekommen alle ein eigenes Verzeichnisse. Und jede
|
||||||
|
Klasse bekommt ein Verzeichnis. In diesem Klassen- Verzeichnis
|
||||||
|
sind dann die Lernenden-Verzeichnisse gesammelt. In jedem dieser
|
||||||
|
Lernenden-Verzeichnisse werden dann die gewünschten Dateien zur
|
||||||
|
Verfügung gestellt.
|
||||||
|
|
||||||
|
Ich bereite mich so vor, dass ich eine Liste mit allen Namen
|
||||||
|
aller Lernenden habe. Diese mache ich dann ein eine Datei. Diese
|
||||||
|
Datei bekommt den Namen (die Abkürzung) der Klasse.
|
||||||
|
|
||||||
|
Weiter werde ich ein Verzeichnis namens "_template" bereitstellen.
|
||||||
|
Da drin werden dann alle Dateien hineingelegt, die allen Lernenden
|
||||||
|
zur Verfügung gestellt werden sollen.
|
||||||
|
|
||||||
|
|
||||||
|
Strategie (Programmablauf)
|
||||||
|
|
||||||
|
Das automatisierte Skript muss jetzt den Dateinamen (vor dem Punkt)
|
||||||
|
auslesen um damit das Grundverzeichnis anzulegen. Dann muss das
|
||||||
|
Skrpt die Datei öffnen und alle Namenseinträge auslesen. Die Namen
|
||||||
|
sind in einer Liste, die ich dann als "array" verwenden werde um
|
||||||
|
mit jedem (Namens-)Eintrag erstens ein Verzeichnis zu erstellen
|
||||||
|
und zweitens die Dateien aus dem Template dort hinein zu kopieren.
|
||||||
|
|
||||||
|
|
||||||
|
Erstellen Sie als Ausgangslage folgende Dateien und Verzeichnisstruktur
|
||||||
|
|
||||||
|
./M122-AP22b.txt
|
||||||
|
|
||||||
|
./_template
|
||||||
|
Datei-1.txt
|
||||||
|
Datei-2.docx
|
||||||
|
Datei-3.pdf
|
||||||
|
|
||||||
|
|
||||||
|
Der Inhalt der M122-AP22b.txt Datei könnte so aussehen:
|
||||||
|
|
||||||
|
Amherd
|
||||||
|
Baume
|
||||||
|
Berset
|
||||||
|
Cassis
|
||||||
|
Keller
|
||||||
|
Parmelin
|
||||||
|
Roesti
|
||||||
|
|
||||||
|
|
||||||
|
Es soll nachher eine solche Struktur entstehen:
|
||||||
|
|
||||||
|
./M122-AP22b
|
||||||
|
Amherd
|
||||||
|
Datei-1.txt
|
||||||
|
Datei-2.docx
|
||||||
|
Datei-3.pdf
|
||||||
|
Baume
|
||||||
|
Datei-1.txt
|
||||||
|
Datei-2.docx
|
||||||
|
Datei-3.pdf
|
||||||
|
Berset
|
||||||
|
Datei-1.txt
|
||||||
|
Datei-2.docx
|
||||||
|
Datei-3.pdf
|
||||||
|
|
||||||
|
usw.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Erstellen Sie ein Skript, das diese Aufgabe erledigt.
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<hr>
|
||||||
|
<br>
|
||||||
|
Hier eine Lösung in **PowerShell**.
|
||||||
|
|
||||||
|
Versuchen Sie alles in **bash** nachzumachen. Aber Achtung. Manche Dinge kann man oder muss man in **bash** anders machen.
|
||||||
|
|
||||||
|
![./loesung-in-powershell/einstieg-prepareFiles-01.ps1](./loesung-in-powershell/einstieg-prepareFiles-01.ps1)
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,17 @@
|
|||||||
|
# mal schauen, ob ob ich Verzeichnisse und Dateien anlegen kann
|
||||||
|
|
||||||
|
# Verzeichnis anlegen
|
||||||
|
mkdir _template
|
||||||
|
|
||||||
|
#Verzeichnis wechseln
|
||||||
|
cd .\_template
|
||||||
|
|
||||||
|
|
||||||
|
# Verzeichnis zurück wechseln
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
dir
|
||||||
|
|
||||||
|
ls .\_template
|
||||||
|
|
||||||
|
echo "---fertig---"
|
@ -0,0 +1,55 @@
|
|||||||
|
# mal schauen, ob ob ich Verzeichnisse und Dateien anlegen kann
|
||||||
|
|
||||||
|
# Verzeichnis anlegen
|
||||||
|
mkdir _template
|
||||||
|
|
||||||
|
#Verzeichnis wechseln
|
||||||
|
cd .\_template
|
||||||
|
|
||||||
|
# Dateien im Verzeichnis anlegen,
|
||||||
|
# jedoch nur mit Fake-Inhalt damit mal was da ist.
|
||||||
|
#
|
||||||
|
# Trick: Mit "echo" wird normalwerweise ein Text
|
||||||
|
# auf die Konsole herausgeschrieben.
|
||||||
|
# Mit dem ">" wird dann dieser Output in eine
|
||||||
|
# Datei umgelenkt. Die Datei wird entweder neu
|
||||||
|
# angelegt oder ersetzt, wenn es schon eine gibt
|
||||||
|
echo "datei-1.txt" > datei-1.txt
|
||||||
|
echo "datei-2.docx" > datei-2.docx
|
||||||
|
echo "datei-3.pdf" > datei-3.pdf
|
||||||
|
echo "datei-4.xlsx" > datei-4.xlsx
|
||||||
|
|
||||||
|
# Verzeichnis zurück wechseln
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
#############################################
|
||||||
|
# Namensdatei-Vorlage automatisch erstellen #
|
||||||
|
#############################################
|
||||||
|
|
||||||
|
# Ich speichere mal den Dateinamen in eine Variable,
|
||||||
|
# weil ich das mehrmals brauche
|
||||||
|
|
||||||
|
$namensdatei = "M122-BR23a.txt"
|
||||||
|
|
||||||
|
# ich mache die Namendatei gleich zur besseren
|
||||||
|
# Ordnung in ein entsprechendes Verzeichnis
|
||||||
|
|
||||||
|
$verzeichnis_namensdateien = "_namensdateien"
|
||||||
|
mkdir $verzeichnis_namensdateien
|
||||||
|
cd $verzeichnis_namensdateien
|
||||||
|
|
||||||
|
# Namendatei anlegen und Inhalte reinschreiben
|
||||||
|
echo "Amherd" > $namensdatei
|
||||||
|
|
||||||
|
# Zwei ">" (">>") hängt das neue Material unten an
|
||||||
|
echo "Baume-Schneider" >> $namensdatei
|
||||||
|
echo "Berset" >> $namensdatei
|
||||||
|
echo "Cassis" >> $namensdatei
|
||||||
|
echo "Keller-Sutter" >> $namensdatei
|
||||||
|
echo "Parmelin" >> $namensdatei
|
||||||
|
echo "Roesti" >> $namensdatei # Umlaute wie das "ö" sind mega schlecht
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
# Skript anhalten, um zu sehen, obs Fehler gab
|
||||||
|
pause
|
@ -0,0 +1,12 @@
|
|||||||
|
# mal schauen, ob ob ich aus Verzeichnissen, Dateien lesen kann
|
||||||
|
|
||||||
|
$verzeichnis_namensdateien = "_namensdateien"
|
||||||
|
|
||||||
|
# Da PowerShell objektorientiert ist, kann man gleich das
|
||||||
|
# Name-Attribut aus der Resultatsliste erfragen.
|
||||||
|
# Dies wird sogleich in eine Variable gespeichert.
|
||||||
|
$allFiles = (dir $verzeichnis_namensdateien).name
|
||||||
|
echo $allFiles
|
||||||
|
|
||||||
|
# Skript anhalten, um zu sehen, obs Fehler gab
|
||||||
|
pause
|
@ -0,0 +1,26 @@
|
|||||||
|
# mal schauen, ob ob ich aus Verzeichnissen, Dateien lesen kann
|
||||||
|
|
||||||
|
$verzeichnis_namensdateien = "_namensdateien"
|
||||||
|
|
||||||
|
# Da PowerShell objektorientiert ist, kann man gleich das
|
||||||
|
# Name-Attribut aus der Resultatsliste erfragen.
|
||||||
|
# Dies wird sogleich in eine Variable gespeichert.
|
||||||
|
$allFiles = (dir $verzeichnis_namensdateien).name
|
||||||
|
|
||||||
|
# Ich versuche mal alles aufzulisten
|
||||||
|
# Wir haben jetzt ja in "allFiles" die ganze Liste der Files
|
||||||
|
# im Verzeichnis gespeichert.
|
||||||
|
# mit "type" kann ich nun auslesen, was in jeder Datei drin ist.
|
||||||
|
# Wenn man in PowerShell ein 2echo" auf eine Liste macht,
|
||||||
|
# kann er die ganze Liste ausdrucken
|
||||||
|
foreach ($file in $allFiles) {
|
||||||
|
$fileinhalt = type $verzeichnis_namensdateien/$file
|
||||||
|
echo $file
|
||||||
|
echo "---"
|
||||||
|
echo $fileinhalt
|
||||||
|
echo "===="
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Skript anhalten, um zu sehen, obs Fehler gab
|
||||||
|
pause
|
@ -0,0 +1,16 @@
|
|||||||
|
|
||||||
|
$verzeichnis_namensdateien = "_namensdateien"
|
||||||
|
$allFiles = (dir $verzeichnis_namensdateien).name
|
||||||
|
|
||||||
|
# Mir fehlt nun noch, dass ich den Dateinamen inkl. dem Punkt habe.
|
||||||
|
# aber ich brauche nur den Teil vor dem Punkt.
|
||||||
|
# Um das zu machen, gibt es eine "split"-Funktion
|
||||||
|
# Nach dem Split, brauche ich dann die erste Position (=0)
|
||||||
|
foreach ($file in $allFiles) {
|
||||||
|
$fileNameVorPunkt = $file.split(".")[0]
|
||||||
|
echo $fileNameVorPunkt
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Skript anhalten, um zu sehen, obs Fehler gab
|
||||||
|
pause
|
@ -0,0 +1,20 @@
|
|||||||
|
# Jetzt alles zusammen
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
$verzeichnis_template = "_template"
|
||||||
|
$verzeichnis_namensdateien = "_namensdateien"
|
||||||
|
|
||||||
|
$allFiles = (dir $verzeichnis_namensdateien).name
|
||||||
|
|
||||||
|
foreach ($file in $allFiles) {
|
||||||
|
$fileNameVorPunkt = $file.split(".")[0]
|
||||||
|
echo $fileNameVorPunkt
|
||||||
|
echo ""
|
||||||
|
$fileinhalt = type $verzeichnis_namensdateien/$file
|
||||||
|
foreach ($zeile in $fileinhalt) {
|
||||||
|
echo $verzeichnis_namensdateien/$file/$zeile
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,17 @@
|
|||||||
|
# Jetzt alles zusammen
|
||||||
|
#
|
||||||
|
$verzeichnis_template = "_template"
|
||||||
|
$verzeichnis_namensdateien = "_namensdateien"
|
||||||
|
|
||||||
|
$allFiles = (dir $verzeichnis_namensdateien).name
|
||||||
|
|
||||||
|
foreach ($file in $allFiles) {
|
||||||
|
$fileNameVorPunkt = $file.split(".")[0]
|
||||||
|
$klasse = $fileNameVorPunkt
|
||||||
|
$fileinhalt = type $verzeichnis_namensdateien/$file
|
||||||
|
foreach ($teilnehmer in $fileinhalt) {
|
||||||
|
mkdir $verzeichnis_namensdateien/$klasse/$teilnehmer
|
||||||
|
copy $verzeichnis_template/*.* $verzeichnis_namensdateien/$klasse/$teilnehmer
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,17 @@
|
|||||||
|
# erstellt alle Verzeichnisse und kopiert die
|
||||||
|
# Template-Dateien in alle Teilnehmer aller Klassen
|
||||||
|
|
||||||
|
$verzeichnis_template = "_template"
|
||||||
|
$verzeichnis_namensdateien = "_namensdateien"
|
||||||
|
|
||||||
|
$allFiles = (dir $verzeichnis_namensdateien).name
|
||||||
|
|
||||||
|
foreach ($file in $allFiles) {
|
||||||
|
$fileNameVorPunkt = $file.split(".")[0]
|
||||||
|
$klasse = $fileNameVorPunkt
|
||||||
|
$fileinhalt = type $verzeichnis_namensdateien/$file
|
||||||
|
foreach ($teilnehmer in $fileinhalt) {
|
||||||
|
mkdir $verzeichnis_namensdateien/$klasse/$teilnehmer
|
||||||
|
copy $verzeichnis_template/*.* $verzeichnis_namensdateien/$klasse/$teilnehmer
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
# Erstelle das Template-Verzeichnis und die Dateien
|
||||||
|
|
||||||
|
# Verzeichnis anlegen
|
||||||
|
mkdir _template -ErrorAction Ignore
|
||||||
|
|
||||||
|
#Verzeichnis wechseln
|
||||||
|
cd .\_template
|
||||||
|
|
||||||
|
# Dateien im Verzeichnis anlegen,
|
||||||
|
# jedoch nur mit Fake-Inhalt damit mal was da ist.
|
||||||
|
echo "datei-1.txt" > datei-1.txt
|
||||||
|
echo "datei-2.docx" > datei-2.docx
|
||||||
|
echo "datei-3.pdf" > datei-3.pdf
|
||||||
|
echo "datei-4.xlsx" > datei-4.xlsx
|
||||||
|
|
||||||
|
# Verzeichnis zurück wechseln
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
#############################################
|
||||||
|
# Namensdatei-Vorlage automatisch erstellen #
|
||||||
|
#############################################
|
||||||
|
|
||||||
|
# Ich speichere mal den Dateinamen in eine Variable,
|
||||||
|
# weil ich das mehrmals brauche
|
||||||
|
|
||||||
|
$namensdatei = "M122-BR23a.txt"
|
||||||
|
|
||||||
|
# ich mache die Namendatei gleich zur besseren
|
||||||
|
# Ordnung in ein entsprechendes Verzeichnis
|
||||||
|
|
||||||
|
$verzeichnis_namensdateien = "_namensdateien"
|
||||||
|
mkdir $verzeichnis_namensdateien -ErrorAction Ignore
|
||||||
|
|
||||||
|
cd $verzeichnis_namensdateien
|
||||||
|
|
||||||
|
# Namendatei anlegen und Inhalte reinschreiben
|
||||||
|
echo "Amherd" > $namensdatei
|
||||||
|
|
||||||
|
# Zwei ">" (">>") hängt das neue Material unten an
|
||||||
|
echo "Baume-Schneider" >> $namensdatei
|
||||||
|
echo "Berset" >> $namensdatei
|
||||||
|
echo "Cassis" >> $namensdatei
|
||||||
|
echo "Keller-Sutter" >> $namensdatei
|
||||||
|
echo "Parmelin" >> $namensdatei
|
||||||
|
echo "Roesti" >> $namensdatei # Umlaute wie das "ö" sind mega schlecht
|
||||||
|
|
||||||
|
|
||||||
|
# Gleich noch eine zweite Namensdatei
|
||||||
|
$namensdatei = "M122-SR23a.txt"
|
||||||
|
echo "Burkhart" > $namensdatei
|
||||||
|
echo "Chiesa" >> $namensdatei
|
||||||
|
echo "Jositsch" >> $namensdatei
|
||||||
|
echo "Noser" >> $namensdatei
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
|
Loading…
Reference in New Issue
Block a user