TOPTORIALS OFFICE - PowerShell 7 Grundkurs
Script: 002_Ordner_erstellen
Autor: Chris
YouTube: https://www.youtube.com/@TOPTORIALS-OFFICE
Webseite: https://www.toptorials.com
Letzte Aktualisierung: 2026-07-21

============================================================

1. # Was macht dieses Script?

Dieses Script erstellt automatisch eine feste Ordnerstruktur mit
PowerShell 7.

Es gibt zwei Varianten:

01_Einfach
02_SendTo_Projektordner_erstellen

Die erste Variante erstellt die Ordner direkt im aktuellen Ordner.

Die zweite Variante ist eine SendTo-Version. Damit kann ein Ordner
im Windows-Explorer per Rechtsklick ausgewaehlt und ueber "Senden an"
an das Script uebergeben werden. Die Projektordner werden dann direkt
in diesem ausgewaehlten Zielordner erstellt.

Dieses Script erstellt neue Ordner. Es loescht keine Dateien und
veraendert keine vorhandenen Dateien.

============================================================
2. Enthaltene Ordner und Dateien
================================

01_Einfach
002_ordner_erstellen.ps1
002_ordner_erstellen_starter_batch.bat

02_SendTo_Projektordner_erstellen
002_sendto_projektordner_erstellen.ps1
002_sendto_projektordner_erstellen_starter_batch.bat

============================================================
3. Welche Ordner werden erstellt?
=================================

In diesem Beispiel wird folgende Ordnerstruktur erstellt:

01_Rohmaterial
02_Audio
03_Projektdateien
04_Grafiken
05_Export
06_Thumbnail
07_Backup
08_UmlauttestäöüßÄÖÜ

Der letzte Ordner dient auch als Umlauttest. Damit kann geprueft
werden, ob Umlaute und Sonderzeichen korrekt gespeichert und
angezeigt werden.

Wichtig:
Die Dateien sollten als UTF-8 gespeichert werden.

In Visual Studio Code sieht man die Kodierung normalerweise unten
rechts in der Statusleiste. Dort sollte UTF-8 stehen.

============================================================
4. Variante 1: 01_Einfach
=========================

Die einfache Variante befindet sich im Ordner:

01_Einfach

Darin liegen diese Dateien:

002_ordner_erstellen.ps1
002_ordner_erstellen_starter_batch.bat

Die PowerShell-Datei enthaelt die eigentliche Logik.

Die Starter-Batchdatei startet PowerShell 7 mit pwsh und fuehrt
das PowerShell-Script aus.

Empfohlener Start:

002_ordner_erstellen_starter_batch.bat

Diese Datei kann per Doppelklick gestartet werden.

Die Ordner werden dann in dem Ordner erstellt, in dem die
Starter-Batchdatei beziehungsweise das Script ausgefuehrt wird.

============================================================
5. Variante 2: 02_SendTo_Projektordner_erstellen
================================================

Die SendTo-Variante befindet sich im Ordner:

02_SendTo_Projektordner_erstellen

Darin liegen diese Dateien:

002_sendto_projektordner_erstellen.ps1
002_sendto_projektordner_erstellen_starter_batch.bat

Diese Variante ist fuer den praktischen Workflow gedacht.

Damit kann ein Zielordner im Windows-Explorer ausgewaehlt werden.
Anschliessend wird die Ordnerstruktur direkt in diesem Zielordner
erstellt.

Typischer Ablauf:

1. Im Explorer einen Zielordner auswaehlen
2. Rechtsklick auf den Ordner
3. Senden an
4. SendTo-Starter-Batchdatei auswaehlen
5. PowerShell erstellt die Projektordner in diesem Zielordner

============================================================
6. SendTo-Verknuepfung einrichten
=================================

Damit die SendTo-Variante ueber das Kontextmenue genutzt werden kann,
muss eine Verknuepfung zur Starter-Batchdatei im SendTo-Ordner von
Windows abgelegt werden.

Den SendTo-Ordner oeffnen:

Windows-Taste + R

Dann eingeben:

shell:sendto

Danach Enter druecken.

In diesen Ordner kann eine Verknuepfung zu folgender Datei gelegt
werden:

002_sendto_projektordner_erstellen_starter_batch.bat

Danach erscheint diese Verknuepfung im Windows-Explorer unter:

Rechtsklick auf einen Ordner
Senden an

============================================================
7. Warum gibt es wieder eine Starter-Batchdatei?
================================================

Die PowerShell-Logik steht in der .ps1-Datei.

Die Batchdatei startet nur PowerShell 7 und ruft das passende
PowerShell-Script auf.

Das hat mehrere Vorteile:

* PowerShell 7 wird gezielt mit pwsh gestartet
* die passende .ps1-Datei wird automatisch gefunden
* der Start ist fuer Einsteiger einfacher
* der Aufbau bleibt ueber die Kursteile hinweg einheitlich
* ueber SendTo kann ein Zielordner bequem uebergeben werden

Wichtig:
Eine .ps1-Datei ist zwar eine PowerShell-Datei, aber die Dateiendung
allein sagt nicht automatisch, ob sie mit Windows PowerShell 5.1 oder
mit PowerShell 7 gestartet wird.

Deshalb wird in diesem Kurs gezielt pwsh verwendet.

pwsh
= PowerShell 7

powershell.exe
= Windows PowerShell 5.1

============================================================
8. Wichtige Befehle und Begriffe
================================

## $ordnerListe

Diese Variable enthaelt eine Liste mit Ordnernamen.

Beispiel:

$ordnerListe = @(
"01_Rohmaterial"
"02_Audio"
"03_Projektdateien"
)

## @(...)

Mit @(... ) wird in PowerShell eine Liste beziehungsweise ein Array
erstellt.

Wenn die Eintraege untereinander stehen, brauchen sie in PowerShell
keine Kommas.

In einer Zeile muessen die Eintraege mit Kommas getrennt werden.

Richtig:

$ordnerListe = @(
"01_Rohmaterial"
"02_Audio"
"03_Projektdateien"
)

Auch richtig:

$ordnerListe = @("01_Rohmaterial", "02_Audio", "03_Projektdateien")

Falsch:

$ordnerListe = @("01_Rohmaterial" "02_Audio" "03_Projektdateien")

## foreach

foreach geht eine Liste Eintrag fuer Eintrag durch.

Beispiel:

foreach ($ordner in $ordnerListe) {
...
}

Dabei enthaelt $ordner immer den aktuellen Eintrag aus der Liste.

## Test-Path

Test-Path prueft, ob ein Pfad existiert.

Beispiel:

Test-Path "01_Rohmaterial"

Wenn der Pfad existiert, ist das Ergebnis True.
Wenn der Pfad nicht existiert, ist das Ergebnis False.

## -not

-not bedeutet "nicht".

Es kehrt ein Ergebnis um.

Aus True wird False.
Aus False wird True.

Beispiel:

if (-not (Test-Path $ordner)) {
...
}

Bedeutung:

Wenn der Ordner noch nicht existiert, dann ...

## New-Item

New-Item erstellt ein neues Element.

In diesem Script wird damit ein Ordner erstellt.

Beispiel:

New-Item -ItemType Directory -Name $ordner | Out-Null

Bedeutung:

New-Item
= erstellt etwas Neues

-ItemType Directory
= das neue Element soll ein Ordner sein

-Name $ordner
= der Name kommt aus der Variable $ordner

## Out-Null

Out-Null unterdrueckt die automatische Ausgabe eines Befehls.

Der Ordner wird trotzdem erstellt. Es wird nur die normale Rueckgabe
von New-Item nicht angezeigt.

Dadurch bleibt die Konsolenausgabe uebersichtlich.

## Read-Host

Read-Host wartet auf eine Eingabe.

In diesem Script wird Read-Host am Ende genutzt, damit das Fenster
nicht sofort geschlossen wird.

============================================================
9. Zusätzliche Begriffe der SendTo-Variante
===========================================

## param

Mit param kann ein PowerShell-Script Werte entgegennehmen, die beim
Start uebergeben werden.

In der SendTo-Variante wird der Zielordner uebergeben.

Beispiel:

param (
[string]$Zielordner
)

## [string]

[string] bedeutet, dass der Wert als Text behandelt wird.

In diesem Script ist der Zielordner ein Textwert, zum Beispiel:

C:\TOPTORIALS_CODE\Testprojekt

[string]: :IsNullOrWhiteSpace

---

Diese Pruefung kontrolliert, ob ein Text leer ist, keinen Wert hat
oder nur aus Leerzeichen besteht.

Beispiel:

[string]: :IsNullOrWhiteSpace\($Zielordner\)

Bedeutung:

Ist $Zielordner leer, nicht vorhanden oder nur Leerzeichen?

Wenn ja, wurde kein brauchbarer Zielordner uebergeben.

## -PathType Container

Bei Test-Path kann mit -PathType genauer angegeben werden, welche Art
von Pfad erwartet wird.

Container bedeutet in diesem Zusammenhang:

Ordner / Verzeichnis

Beispiel:

Test-Path -Path $Zielordner -PathType Container

Bedeutung:

Pruefe, ob dieser Pfad existiert und ob er ein Ordner ist.

Fuer normale Windows-Pfade kann man sich merken:

Container = Ordner
Leaf      = Datei

## Join-Path

Join-Path setzt Pfade sauber zusammen.

Beispiel:

$ordnerPfad = Join-Path -Path $Zielordner -ChildPath $ordner

Wenn $Zielordner diesen Wert hat:

C:\Testprojekt

und $ordner diesen Wert hat:

01_Rohmaterial

dann entsteht daraus:

C:\Testprojekt\01_Rohmaterial

## -Path

In der SendTo-Variante wird New-Item mit -Path verwendet:

New-Item -ItemType Directory -Path $ordnerPfad | Out-Null

Der Grund:

-Name $ordner
= Name im aktuellen Ordner

-Path $ordnerPfad
= vollstaendiger Zielpfad

Da die SendTo-Variante mit einem uebergebenen Zielordner arbeitet,
ist -Path hier die passendere Variante.

## %~1

%~1 ist ein Batch-Ausdruck.

Er steht fuer den ersten uebergebenen Parameter ohne aeussere
Anfuehrungszeichen.

In der SendTo-Starter-Batchdatei wird dieser Wert an PowerShell
weitergegeben.

Beispiel:

pwsh -ExecutionPolicy Bypass -File "%~dp0\002_sendto_projektordner_erstellen.ps1" "%~1"

Der uebergebene Ordner landet im PowerShell-Script in:

$Zielordner

## %*

%* steht in Batch fuer alle uebergebenen Parameter.

In diesem Tutorial verwenden wir bewusst nur einen Zielordner und
deshalb "%~1".

============================================================
10. UTF-8 und Umlaute
=====================

Fuer diese Kursreihe sollten die Scriptdateien als UTF-8 gespeichert
werden.

UTF-8 ist eine sehr verbreitete Zeichenkodierung und hilft dabei,
Umlaute und Sonderzeichen korrekt zu speichern und anzuzeigen.

In Visual Studio Code sollte unten rechts normalerweise UTF-8 stehen.

UTF-8 ohne BOM ist fuer moderne Scripte meistens die beste Wahl.

Kurz erklaert:

UTF-8
= UTF-8 ohne zusaetzliche Markierung am Dateianfang

UTF-8 with BOM
= UTF-8 mit unsichtbarer Markierung am Dateianfang

BOM steht fuer:

Byte Order Mark

Fuer diesen Kurs wird normalerweise UTF-8 ohne BOM empfohlen.

============================================================
11. Testmodus und Sicherheit
============================

Dieses Script erstellt neue Ordner.

Es loescht keine Dateien.
Es verschiebt keine Dateien.
Es ueberschreibt keine vorhandenen Dateien.

Trotzdem sollte das Script zuerst in einer Testumgebung ausprobiert
werden.

Empfehlung:

Nicht direkt mit wichtigen Originaldateien testen.
Zuerst in einem separaten Testordner ausprobieren.
Danach kontrollieren, ob die Ordner wie erwartet erstellt wurden.

Die Nutzung erfolgt auf eigene Verantwortung.

============================================================
12. Typische Fehler
===================

## PowerShell 7 wurde nicht gefunden

Wenn pwsh nicht gefunden wird, ist PowerShell 7 wahrscheinlich nicht
installiert oder nicht im Systempfad verfuegbar.

Pruefen mit:

pwsh --version

## Datei heisst versehentlich .ps1.txt

Wenn Dateinamenerweiterungen im Explorer ausgeblendet sind, kann eine
Datei versehentlich so heissen:

002_ordner_erstellen.ps1.txt

Richtig ist:

002_ordner_erstellen.ps1

Bei der SendTo-Variante:

002_sendto_projektordner_erstellen.ps1

## Keine SendTo-Uebergabe

Wenn die SendTo-Starter-Batchdatei direkt per Doppelklick gestartet
wird, wurde kein Zielordner uebergeben.

Dann erscheint eine Meldung wie:

Bitte uebergib einen Ordner.

Die SendTo-Variante ist dafuer gedacht, dass ein Ordner ueber
"Senden an" oder per Drag & Drop uebergeben wird.

## Falsche Listenschreibweise

Falsch:

$ordnerListe = @("01_Rohmaterial" "02_Audio" "03_Projektdateien")

Richtig in einer Zeile:

$ordnerListe = @("01_Rohmaterial", "02_Audio", "03_Projektdateien")

Richtig untereinander:

$ordnerListe = @(
"01_Rohmaterial"
"02_Audio"
"03_Projektdateien"
)

## Umlaute werden falsch angezeigt

Wenn Umlaute falsch angezeigt werden, pruefe:

* Datei als UTF-8 gespeichert?
* VS Code unten rechts auf UTF-8?
* Starter-Batchdatei nutzt chcp 65001?
* PowerShell 7 wird mit pwsh gestartet?

============================================================
13. Wichtige Lernpunkte
=======================

In diesem Teil sieht man unter anderem:

* wie mehrere Ordner automatisch erstellt werden
* wie eine Liste mit @(... ) aufgebaut wird
* wie foreach eine Liste Eintrag fuer Eintrag durchgeht
* wie Test-Path prueft, ob ein Ordner existiert
* was -not bedeutet
* wie New-Item Ordner erstellt
* warum -ItemType Directory verwendet wird
* warum Out-Null die Ausgabe sauber haelt
* wie eine Starter-Batchdatei PowerShell 7 startet
* wie param uebergebene Werte entgegennimmt
* wie ein Zielordner ueber SendTo uebergeben wird
* was [string]::IsNullOrWhiteSpace prueft
* was -PathType Container bedeutet
* wie Join-Path Pfade sauber zusammensetzt
* warum in der SendTo-Variante -Path sinnvoll ist
* was %~1 in der Starter-Batchdatei bedeutet
* warum UTF-8 fuer Umlaute wichtig ist

============================================================
14. Kurz zusammengefasst
========================

## 01_Einfach

Diese Variante erstellt die Ordner im aktuellen Ordner.

Gut zum Verstehen der Grundlogik.

## 02_SendTo_Projektordner_erstellen

Diese Variante erstellt die Ordner in einem uebergebenen Zielordner.

Gut fuer den praktischen Workflow im Windows-Explorer.

Die einfache Variante ist gut zum Lernen.
Die SendTo-Variante ist besser fuer den Alltag.

Die Nutzung erfolgt auf eigene Verantwortung.
