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

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

1. # Was macht dieses Script?

Dieses Script erstellt automatisch eine feste Ordnerstruktur mit
Python.

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.py
002_ordner_erstellen_starter_batch.bat

02_SendTo_Projektordner_erstellen
002_sendto_projektordner_erstellen.py
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.py
002_ordner_erstellen_starter_batch.bat

Die Python-Datei enthaelt die eigentliche Logik.

Die Starter-Batchdatei startet Python mit py und fuehrt das
Python-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 liegt.

Die Starter-Batchdatei wechselt vorher mit

cd /d "%~dp0"

in ihren eigenen Ordner. Danach wird die Python-Datei nur noch ueber
ihren Dateinamen gestartet.

Das ist sauberer, weil %~dp0 bereits einen abschliessenden Backslash
enthaelt.

============================================================
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.py
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. Python 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 eine Starter-Batchdatei?
=========================================

Die Python-Logik steht in der .py-Datei.

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

Das hat mehrere Vorteile:

* Python wird gezielt mit py gestartet
* alternativ kann python verwendet werden
* die passende .py-Datei wird automatisch gefunden
* der Start ist fuer Einsteiger einfacher
* das Fenster bleibt sichtbar
* Fehlermeldungen bleiben sichtbar
* der Aufbau bleibt ueber die Kursteile hinweg einheitlich
* ueber SendTo kann ein Zielordner bequem uebergeben werden

Wichtig:
Eine .py-Datei kann je nach Windows-Einstellung auch direkt per
Doppelklick gestartet werden. Wenn dabei aber ein Fehler auftritt,
schliesst sich das Konsolenfenster oft sofort wieder.

Mit der Starter-Batchdatei bleibt das Fenster durch pause sichtbar.
Dadurch kann man Ausgaben und Fehlermeldungen besser lesen.

============================================================
8. Wichtige Begriffe der einfachen Python-Variante
==================================================

## from pathlib import Path

Damit wird Path aus dem Python-Modul pathlib importiert.

pathlib ist eine moderne Moeglichkeit, mit Dateien, Ordnern und
Pfaden zu arbeiten.

Beispiel:

from pathlib import Path

## Path

Path erstellt ein Pfadobjekt.

Beispiel:

ordner_pfad = Path(ordner)

Danach koennen Methoden wie exists(), is_dir() oder mkdir() verwendet
werden.

## print

print gibt Text im Konsolenfenster aus.

Beispiel:

print("Standardordner werden erstellt...")

Eine leere Zeile kann so ausgegeben werden:

print()

## ordner_liste

Diese Variable enthaelt eine Liste mit Ordnernamen.

Beispiel:

ordner_liste = [
"01_Rohmaterial",
"02_Audio",
"03_Projektdateien"
]

## Listen in Python

Eine Liste wird in Python mit eckigen Klammern erstellt:

[
...
]

Die Eintraege werden mit Kommas getrennt.

Richtig:

ordner_liste = [
"01_Rohmaterial",
"02_Audio",
"03_Projektdateien"
]

Falsch:

ordner_liste = [
"01_Rohmaterial"
"02_Audio"
"03_Projektdateien"
]

Wichtig:
In Python muessen Listeneintraege mit Kommas getrennt werden.

## Listeneintraege abrufen

Python zaehlt Listeneintraege ab 0.

Beispiel:

ordner_liste[0] = 01_Rohmaterial
ordner_liste[1] = 02_Audio
ordner_liste[2] = 03_Projektdateien
ordner_liste[3] = 04_Grafiken
ordner_liste[4] = 05_Export
ordner_liste[5] = 06_Thumbnail
ordner_liste[6] = 07_Backup
ordner_liste[7] = 08_UmlauttestäöüßÄÖÜ

## for

for geht eine Liste Eintrag fuer Eintrag durch.

Beispiel:

for ordner in ordner_liste:
...

Dabei enthaelt ordner immer den aktuellen Eintrag aus der Liste.

## exists()

exists() prueft, ob ein Pfad existiert.

Beispiel:

ordner_pfad.exists()

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 ordner_pfad.exists():
...

Bedeutung:

Wenn der Ordner noch nicht existiert, dann ...

## mkdir()

mkdir() erstellt einen Ordner.

Beispiel:

ordner_pfad.mkdir()

In diesem Script wird zuerst die ausfuehrliche Variante verwendet:

if not ordner_pfad.exists():
ordner_pfad.mkdir()

Dadurch sieht man gut:

exists() prueft, ob der Ordner existiert.
not kehrt das Ergebnis um.
mkdir() erstellt den Ordner.

## exist_ok=True

Python kann das Erstellen eines Ordners auch kuerzer schreiben:

ordner_pfad.mkdir(exist_ok=True)

Bedeutung:

Erstelle den Ordner.
Wenn er schon existiert, ist das okay und kein Fehler.

Wichtig:
Nicht beide Varianten gleichzeitig aktiv verwenden.

Entweder:

if not ordner_pfad.exists():
ordner_pfad.mkdir()

oder:

ordner_pfad.mkdir(exist_ok=True)

============================================================
9. Einrueckungen in Python
==========================

Ein sehr wichtiger Punkt bei Python sind Einrueckungen.

In Batch und PowerShell helfen Einrueckungen vor allem der Lesbarkeit.
In Python sind Einrueckungen aber Teil der Sprache.

Python erkennt an der Einrueckung, welche Zeilen zu einer Schleife
oder zu einer if-Abfrage gehoeren.

Beispiel:

for ordner in ordner_liste:
ordner_pfad = Path(ordner)

```
if not ordner_pfad.exists():
    ordner_pfad.mkdir()
```

Bedeutung:

keine Einrueckung = ausserhalb der Schleife
4 Leerzeichen   = innerhalb der for-Schleife
8 Leerzeichen   = innerhalb der if-Abfrage

Python verlangt nicht technisch immer exakt 4 Leerzeichen. Wichtig
ist, dass die Einrueckung korrekt und einheitlich ist.

Fuer diesen Kurs verwenden wir aber den ueblichen Standard:

4 Leerzeichen pro Ebene

Visual Studio Code macht das normalerweise automatisch richtig, auch
wenn man die Tab-Taste drueckt.

Wenn mit einem einfachen Editor gearbeitet wird, sollte man sehr
genau darauf achten, nicht Tabs und Leerzeichen durcheinander zu
mischen.

Typische Fehler bei falscher Einrueckung:

IndentationError
TabError

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

## import sys

Das Modul sys wird gebraucht, um auf uebergebene Startparameter
zugreifen zu koennen.

Beispiel:

import sys

## sys.argv

sys.argv enthaelt die Startinformationen des Python-Scripts.

Dabei gilt:

sys.argv[0] = Name oder Pfad des Python-Scripts
sys.argv[1] = erster uebergebener Parameter
sys.argv[2] = zweiter uebergebener Parameter

In diesem Script wird sys.argv[1] verwendet, weil dort der uebergebene
Zielordner steht.

## len(sys.argv)

len() gibt die Anzahl der Eintraege zurueck.

Beispiel:

if len(sys.argv) < 2:

Bedeutung:

Wenn weniger als 2 Eintraege vorhanden sind, gibt es keinen ersten
uebergebenen Parameter.

Dann wurde kein Zielordner uebergeben.

## sys.exit()

sys.exit() beendet das Script.

In diesem Script wird sys.exit() verwendet, wenn kein Zielordner
uebergeben wurde oder wenn der uebergebene Pfad kein Ordner ist.

## is_dir()

is_dir() prueft, ob ein Pfad ein Ordner ist.

Beispiel:

if not zielordner.is_dir():

Bedeutung:

Wenn zielordner kein Ordner ist, dann ...

Das entspricht vom Zweck her ungefaehr der PowerShell-Pruefung:

Test-Path -Path $Zielordner -PathType Container

Fuer normale Windows-Pfade kann man sich merken:

PowerShell: -PathType Container
Python:     is_dir()

## zielordner / ordner

pathlib kann Pfade sehr gut lesbar zusammensetzen.

Beispiel:

ordner_pfad = zielordner / ordner

Wenn zielordner diesen Wert hat:

C:\Testprojekt

und ordner diesen Wert hat:

01_Rohmaterial

dann entsteht daraus:

C:\Testprojekt\01_Rohmaterial

Vom Grundgedanken her entspricht das ungefaehr Join-Path in
PowerShell.

## Mehrere Parameter

In diesem Tutorial verwenden wir bewusst nur einen Zielordner.

Grundsaetzlich koennte Python aber mehrere uebergebene Parameter
verarbeiten.

Einzelne Parameter:

sys.argv[1] = erster Parameter
sys.argv[2] = zweiter Parameter
sys.argv[3] = dritter Parameter

Alle uebergebenen Parameter ohne den Scriptnamen:

sys.argv[1:]

Das bedeutet:

Nimm alle Eintraege ab Index 1.

============================================================
11. Wichtige Batch-Begriffe der Starter-Dateien
===============================================

## chcp 65001 >nul

Diese Zeile setzt die Codepage der Eingabeaufforderung auf UTF-8.

65001 steht fuer UTF-8.

> nul sorgt dafuer, dass die Rueckmeldung von chcp nicht angezeigt
> wird.

## cd /d "%~dp0"

Diese Zeile wechselt in den Ordner der Starter-Batchdatei.

%~dp0 steht in einer Batchdatei fuer den Ordner, in dem die
Batchdatei selbst liegt.

Wichtig:
%~dp0 enthaelt bereits den abschliessenden Backslash.

Deshalb wird zuerst mit

cd /d "%~dp0"

in den Ordner gewechselt. Danach wird die Python-Datei nur noch ueber
ihren Dateinamen gestartet.

Das ist uebersichtlich und vermeidet doppelte Backslashes im Pfad.

/d sorgt dafuer, dass der Ordnerwechsel auch funktioniert, wenn dabei
das Laufwerk gewechselt werden muss.

## py

py startet Python ueber den Python Launcher.

Beispiel:

py "002_ordner_erstellen.py"

Alternative:

python "002_ordner_erstellen.py"

## %~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 Python
weitergegeben.

Beispiel:

py "002_sendto_projektordner_erstellen.py" "%~1"

Der uebergebene Ordner landet im Python-Script in:

sys.argv[1]

## %*

%* steht in Batch fuer alle uebergebenen Parameter.

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

## pause

pause haelt das Fenster offen, bis eine Taste gedrueckt wird.

Das ist wichtig, damit Ausgaben und Fehlermeldungen sichtbar bleiben.

============================================================
12. 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.

============================================================
13. 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.

============================================================
14. Typische Fehler
===================

## Python wurde nicht gefunden

Wenn py oder python nicht gefunden wird, ist Python wahrscheinlich
nicht installiert oder nicht im Systempfad verfuegbar.

Pruefen mit:

py --version
python --version

## Datei heisst versehentlich .py.txt

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

002_ordner_erstellen.py.txt

Richtig ist:

002_ordner_erstellen.py

Bei der SendTo-Variante:

002_sendto_projektordner_erstellen.py

## 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 Einrueckung

Wenn die Einrueckung nicht stimmt, kann Python einen Fehler ausgeben.

Typische Fehlermeldungen:

IndentationError
TabError

Fuer diesen Kurs gilt:

4 Leerzeichen pro Ebene
Tabs und Leerzeichen nicht mischen

## Falsche Listenschreibweise

Falsch:

ordner_liste = [
"01_Rohmaterial"
"02_Audio"
"03_Projektdateien"
]

Richtig:

ordner_liste = [
"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?
* Python wird mit py oder python korrekt gestartet?

============================================================
15. Wichtige Lernpunkte
=======================

In diesem Teil sieht man unter anderem:

* wie mehrere Ordner automatisch erstellt werden
* wie eine Liste mit [ ... ] aufgebaut wird
* warum Listeneintraege Kommas brauchen
* wie Python Listeneintraege ab 0 zaehlt
* warum Einrueckungen in Python wichtig sind
* wie eine for-Schleife eine Liste durchgeht
* wie Path aus pathlib verwendet wird
* wie exists() prueft, ob ein Pfad existiert
* was not bedeutet
* wie mkdir() einen Ordner erstellt
* wie mkdir(exist_ok=True) als Kurzform funktioniert
* warum eine Starter-Batchdatei sinnvoll ist
* wie cd /d "%~dp0" den richtigen Ordner setzt
* wie import sys Zugriff auf Startparameter ermoeglicht
* wie sys.argv[1] den ersten uebergebenen Parameter enthaelt
* wie is_dir() prueft, ob ein Pfad ein Ordner ist
* wie pathlib mit zielordner / ordner Pfade zusammensetzt
* was %~1 in der Starter-Batchdatei bedeutet
* warum UTF-8 fuer Umlaute wichtig ist

============================================================
16. 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.
