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