From f21bb8700d2a6a4c198083b93674fd64d1499ce1 Mon Sep 17 00:00:00 2001 From: "Harald G. Mueller" Date: Fri, 20 Jan 2023 18:29:45 +0100 Subject: [PATCH] muh --- m122/uebungen/README.md | 72 -------------- .../README.md | 91 ++++++++++++++++++ .../_namensdateien/M122-BR23a.txt | Bin 0 -> 150 bytes .../_namensdateien/M122-SR23a.txt | Bin 0 -> 72 bytes .../_template/datei-1.txt | Bin 0 -> 28 bytes .../_template/datei-2.docx | Bin 0 -> 30 bytes .../_template/datei-3.pdf | Bin 0 -> 28 bytes .../_template/datei-4.xlsx | Bin 0 -> 30 bytes .../einstieg-prepareFiles-01.ps1 | 17 ++++ .../einstieg-prepareFiles-02.ps1 | 55 +++++++++++ .../einstieg-prepareFiles-03.ps1 | 12 +++ .../einstieg-prepareFiles-04.ps1 | 26 +++++ .../einstieg-prepareFiles-05.ps1 | 16 +++ .../einstieg-prepareFiles-06.ps1 | 20 ++++ .../einstieg-prepareFiles-07.ps1 | 17 ++++ .../loesung-in-powershell/prepareFiles.ps1 | 17 ++++ .../loesung-in-powershell/prepareTemplate.ps1 | 56 +++++++++++ 17 files changed, 327 insertions(+), 72 deletions(-) delete mode 100644 m122/uebungen/README.md create mode 100644 m122/uebungen/verzeichnisse-und-dateien-anlegen/README.md create mode 100644 m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/_namensdateien/M122-BR23a.txt create mode 100644 m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/_namensdateien/M122-SR23a.txt create mode 100644 m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/_template/datei-1.txt create mode 100644 m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/_template/datei-2.docx create mode 100644 m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/_template/datei-3.pdf create mode 100644 m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/_template/datei-4.xlsx create mode 100644 m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/einstieg-prepareFiles-01.ps1 create mode 100644 m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/einstieg-prepareFiles-02.ps1 create mode 100644 m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/einstieg-prepareFiles-03.ps1 create mode 100644 m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/einstieg-prepareFiles-04.ps1 create mode 100644 m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/einstieg-prepareFiles-05.ps1 create mode 100644 m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/einstieg-prepareFiles-06.ps1 create mode 100644 m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/einstieg-prepareFiles-07.ps1 create mode 100644 m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/prepareFiles.ps1 create mode 100644 m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/prepareTemplate.ps1 diff --git a/m122/uebungen/README.md b/m122/uebungen/README.md deleted file mode 100644 index dbf87d1..0000000 --- a/m122/uebungen/README.md +++ /dev/null @@ -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. \ No newline at end of file diff --git a/m122/uebungen/verzeichnisse-und-dateien-anlegen/README.md b/m122/uebungen/verzeichnisse-und-dateien-anlegen/README.md new file mode 100644 index 0000000..43a57fb --- /dev/null +++ b/m122/uebungen/verzeichnisse-und-dateien-anlegen/README.md @@ -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. + +
+
+
+
+
+
+
+
+
+
+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) diff --git a/m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/_namensdateien/M122-BR23a.txt b/m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/_namensdateien/M122-BR23a.txt new file mode 100644 index 0000000000000000000000000000000000000000..9323eb8d91387073326e8129e0221621ed1f0bcc GIT binary patch literal 150 zcmX|(K?;B{3R%`by7h>A={bFbJyCnY1O4gr3y8gl=xd! wY19lm*d5fI&#*0!W6mv&z&M`q4&oWJ>_)" 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 \ No newline at end of file diff --git a/m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/einstieg-prepareFiles-03.ps1 b/m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/einstieg-prepareFiles-03.ps1 new file mode 100644 index 0000000..111f558 --- /dev/null +++ b/m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/einstieg-prepareFiles-03.ps1 @@ -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 \ No newline at end of file diff --git a/m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/einstieg-prepareFiles-04.ps1 b/m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/einstieg-prepareFiles-04.ps1 new file mode 100644 index 0000000..b437f24 --- /dev/null +++ b/m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/einstieg-prepareFiles-04.ps1 @@ -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 \ No newline at end of file diff --git a/m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/einstieg-prepareFiles-05.ps1 b/m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/einstieg-prepareFiles-05.ps1 new file mode 100644 index 0000000..ef1b71d --- /dev/null +++ b/m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/einstieg-prepareFiles-05.ps1 @@ -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 \ No newline at end of file diff --git a/m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/einstieg-prepareFiles-06.ps1 b/m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/einstieg-prepareFiles-06.ps1 new file mode 100644 index 0000000..b0ecd09 --- /dev/null +++ b/m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/einstieg-prepareFiles-06.ps1 @@ -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 + } +} + diff --git a/m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/einstieg-prepareFiles-07.ps1 b/m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/einstieg-prepareFiles-07.ps1 new file mode 100644 index 0000000..125f902 --- /dev/null +++ b/m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/einstieg-prepareFiles-07.ps1 @@ -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 + } +} + diff --git a/m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/prepareFiles.ps1 b/m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/prepareFiles.ps1 new file mode 100644 index 0000000..389a19c --- /dev/null +++ b/m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/prepareFiles.ps1 @@ -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 + } +} diff --git a/m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/prepareTemplate.ps1 b/m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/prepareTemplate.ps1 new file mode 100644 index 0000000..da0f360 --- /dev/null +++ b/m122/uebungen/verzeichnisse-und-dateien-anlegen/loesung-in-powershell/prepareTemplate.ps1 @@ -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 .. +