TOPTORIALS OFFICE - Python Grundkurs
Script: 006_Ordnername_als_Praefix
Autor: Chris
YouTube: https://www.youtube.com/@TOPTORIALS-OFFICE
Webseite: https://www.toptorials.com
Version: 1.0
Letzte Aktualisierung: 2026-08-18

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

1. Was machen diese Scripte?
============================

Diese Scripte benennen Dateien mit Python um und setzen den Namen
des jeweiligen Ordners als Präfix vor den bisherigen Dateinamen.

Zwischen Ordnername und bisherigem Dateinamen wird automatisch ein
Unterstrich eingefügt.

Beispiel:

C:\Test\Rechnungen\beleg001.pdf
C:\Test\Rechnungen\beleg002.pdf

Nach der echten Ausführung:

C:\Test\Rechnungen\Rechnungen_beleg001.pdf
C:\Test\Rechnungen\Rechnungen_beleg002.pdf

Der Ordner Rechnungen selbst wird nicht umbenannt.

Es gibt zwei Varianten:

01_Unterordnerinhalt_mit_Ordnername_umbenennen
02_SendTo_Ordnerinhalt_mit_Ordnername_umbenennen

Die erste Variante verarbeitet alle direkten Unterordner des
aktuellen Hauptordners. In jedem dieser Unterordner werden nur die
direkt enthaltenen Dateien umbenannt.

Die zweite Variante erhält einen oder mehrere Ordner über das
Windows-Menü "Senden an". Sie benennt nur die direkt darin
enthaltenen Dateien um.

Beide Varianten arbeiten absichtlich nicht rekursiv. Tiefere
Unterordner und deren Dateien bleiben unverändert.

Standardmäßig ist bei beiden Varianten der sichere Testmodus aktiv.
Er zeigt nur an, was bei einer echten Ausführung passieren würde.

Im Testmodus werden:

* keine Dateien umbenannt
* keine Ordner umbenannt
* keine vorhandenen Elemente verändert

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

2. Voraussetzungen
===================

Benötigt werden:

* Windows 10 oder Windows 11
* eine installierte Python-Version
* der Python Launcher "py" oder alternativ der Befehl "python"
* Schreibberechtigung für die zu bearbeitenden Dateien und Ordner

Zum Prüfen kann eine Eingabeaufforderung geöffnet werden.

Python Launcher prüfen:

py --version

Python direkt prüfen:

python --version

Die Python-Scripte verwenden ausschließlich Module aus der
Python-Standardbibliothek. Es müssen keine zusätzlichen Pakete mit
pip installiert werden.

Verwendete Module:

datetime
pathlib
subprocess
sys

Die Zwischenablage wird unter Windows über das Programm clip
angesprochen.

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

3. Enthaltene Ordner und Dateien
================================

006_Ordnername_als_Praefix

01_Unterordnerinhalt_mit_Ordnername_umbenennen
006_unterordnerinhalt_mit_ordnername_umbenennen.py
006_unterordnerinhalt_mit_ordnername_umbenennen_starter_batch_test.bat

02_SendTo_Ordnerinhalt_mit_Ordnername_umbenennen
006_sendto_ordnerinhalt_mit_ordnername_umbenennen.py
006_sendto_ordnerinhalt_mit_ordnername_umbenennen_starter_batch_test.bat

README.txt

Die Dateien mit der Endung .py enthalten die eigentliche
Python-Logik.

Die Dateien mit der Endung .bat starten die passenden Python-Scripte
und aktivieren abhängig vom eigenen Dateinamen den Testmodus.

Der vorgesehene Kursordner lautet:

C:\TOPTORIALS_CODE\020_Python_Grundkurs\006_Ordnername_als_Praefix

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

4. Wichtiger Sicherheitshinweis
===============================

Bitte die Scripte zuerst ausschließlich mit unwichtigen Testdateien
und Testordnern ausprobieren.

Die mitgelieferten Starter-Batchdateien tragen am Ende ihres Namens:

_test.bat

Solange _test im Namen der Starter-Batchdatei steht, wird das
Python-Script mit folgendem Argument gestartet:

--test

In diesem Modus wird nur angezeigt, welche Dateien bei einer echten
Ausführung umbenannt würden.

Erst wenn die Ausgabe vollständig geprüft wurde, kann _test aus dem
Namen der jeweiligen Starter-Batchdatei entfernt werden.

Beispiel für Variante 1:

Testmodus:
006_unterordnerinhalt_mit_ordnername_umbenennen_starter_batch_test.bat

Echtmodus:
006_unterordnerinhalt_mit_ordnername_umbenennen_starter_batch.bat

Beispiel für Variante 2:

Testmodus:
006_sendto_ordnerinhalt_mit_ordnername_umbenennen_starter_batch_test.bat

Echtmodus:
006_sendto_ordnerinhalt_mit_ordnername_umbenennen_starter_batch.bat

Im Echtmodus erscheint zusätzlich eine Sicherheitsabfrage.

Zum Fortfahren muss eingegeben werden:

JA

Die Eingabe wird mit upper() in Großbuchstaben umgewandelt. Deshalb
werden beispielsweise auch diese Eingaben akzeptiert:

ja
Ja
jA

Zusätzliche Leerzeichen werden nicht automatisch entfernt.

Jede andere Eingabe bricht die Ausführung ab.

Trotz der eingebauten Schutzmaßnahmen sollte vor der Verwendung mit
wichtigen Dateien immer eine aktuelle Datensicherung vorhanden sein.

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

5. Wie wird das Präfix gebildet?
================================

Das Präfix wird automatisch aus dem Namen des gerade verarbeiteten
Ordners und einem Unterstrich zusammengesetzt.

Die entscheidende Python-Zeile lautet:

praefix = ordner.name + "_"

Heißt der Ordner:

Rechnungen

dann lautet das Präfix:

Rechnungen_

Der neue Dateiname wird aus dem Präfix und dem bisherigen Namen
gebildet:

neuer_name = praefix + datei.name

Aus:

beleg001.pdf

wird dadurch:

Rechnungen_beleg001.pdf

Die Dateiendung bleibt erhalten, weil der vollständige bisherige
Dateiname einschließlich Endung an das Präfix angehängt wird.

Mit dem Schrägstrich-Operator von Path wird der vollständige
Zielpfad zusammengesetzt:

ziel_pfad = ordner / neuer_name

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

6. Variante 1: Direkte Unterordner verarbeiten
==============================================

Diese Variante befindet sich im Ordner:

01_Unterordnerinhalt_mit_Ordnername_umbenennen

Darin liegen diese Dateien:

006_unterordnerinhalt_mit_ordnername_umbenennen.py
006_unterordnerinhalt_mit_ordnername_umbenennen_starter_batch_test.bat

Die Starter-Batchdatei wechselt zuerst in ihren eigenen Ordner.
Dieser Ordner wird dadurch zum Hauptordner für die Verarbeitung.

Das Python-Script ermittelt den aktuellen Hauptordner mit:

basis_ordner = Path.cwd()

Anschließend ermittelt es darin alle direkt enthaltenen
Unterordner.

Beispiel vor dem Umbenennen:

C:\Test\Rechnungen\beleg001.pdf
C:\Test\Rechnungen\beleg002.pdf
C:\Test\Scans\dokument001.jpg
C:\Test\Scans\dokument002.jpg
C:\Test\Scans\Archiv\alt.jpg

Beispiel nach der echten Ausführung:

C:\Test\Rechnungen\Rechnungen_beleg001.pdf
C:\Test\Rechnungen\Rechnungen_beleg002.pdf
C:\Test\Scans\Scans_dokument001.jpg
C:\Test\Scans\Scans_dokument002.jpg
C:\Test\Scans\Archiv\alt.jpg

Der Unterordner Archiv und die darin enthaltene Datei alt.jpg
bleiben unverändert.

Die Ordner Rechnungen und Scans selbst werden ebenfalls nicht
umbenannt.

Empfohlener erster Start:

006_unterordnerinhalt_mit_ordnername_umbenennen_starter_batch_test.bat

Die Starter-Batchdatei kann per Doppelklick gestartet werden.

Wichtig:

Jeder direkte Unterordner des Hauptordners wird verarbeitet. Deshalb
sollten sich dort nur Unterordner befinden, deren direkte Dateien
tatsächlich geprüft beziehungsweise umbenannt werden sollen.

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

7. Variante 2: Ordner über SendTo verarbeiten
=============================================

Diese Variante befindet sich im Ordner:

02_SendTo_Ordnerinhalt_mit_Ordnername_umbenennen

Darin liegen diese Dateien:

006_sendto_ordnerinhalt_mit_ordnername_umbenennen.py
006_sendto_ordnerinhalt_mit_ordnername_umbenennen_starter_batch_test.bat

Diese Variante erhält einen oder mehrere Ordner über das
Windows-Menü "Senden an".

Sie benennt nicht die ausgewählten Ordner selbst um, sondern nur die
direkt darin enthaltenen Dateien.

Beispielauswahl:

C:\Test\Rechnungen
C:\Test\Scans

Jeder Ordner erhält sein eigenes Präfix:

Rechnungen\beleg001.pdf
wird zu:
Rechnungen\Rechnungen_beleg001.pdf

Scans\dokument001.jpg
wird zu:
Scans\Scans_dokument001.jpg

Es können ein einzelner oder mehrere Ordner gemeinsam ausgewählt
werden.

Doppelt übergebene Pfade werden mit einer Liste und einem Set
erkannt. Jeder Pfad wird dadurch nur einmal verarbeitet.

Werden statt Ordnern einzelne Dateien übergeben, werden diese als
ungeeignete Übergaben übersprungen.

Eine Laufwerkswurzel wie C:\ wird aus Sicherheitsgründen ebenfalls
nicht verarbeitet.

Auch diese Variante arbeitet nicht rekursiv. Mögliche Unterordner
und die darin enthaltenen Dateien bleiben unverändert.

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

8. SendTo-Verknüpfung einrichten
================================

Für die SendTo-Variante wird eine Verknüpfung zur passenden
Starter-Batchdatei im SendTo-Ordner von Windows angelegt.

Den SendTo-Ordner öffnen:

1. Windows-Taste und R drücken
2. shell:sendto eingeben
3. Enter drücken

In diesem Ordner wird eine Verknüpfung zu folgender Datei angelegt:

006_sendto_ordnerinhalt_mit_ordnername_umbenennen_starter_batch_test.bat

Die Verknüpfung kann einen verständlichen Namen erhalten, zum
Beispiel:

TEST - Python 006 - Ordnerinhalt mit Ordnername als Präfix

Danach erscheint sie im Windows-Explorer unter:

Rechtsklick auf markierte Ordner
Senden an

Wichtig:

Das Python-Script und die Starter-Batchdatei sollten an ihrem festen
Speicherort zusammenbleiben.

In den SendTo-Ordner gehört nur die Verknüpfung zur
Starter-Batchdatei.

Solange _test im Namen der tatsächlichen Starter-Batchdatei steht,
wird der Testmodus verwendet. Der Name der Verknüpfung entscheidet
nicht über den Modus.

Nach dem Test kann _test aus dem Namen der Starter-Batchdatei
entfernt werden. Anschließend sollte die Verknüpfung geprüft oder bei
Bedarf neu erstellt werden.

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

9. Wie funktionieren die Umbenennungspläne?
===========================================

Die Scripte benennen gefundene Dateien nicht sofort um.

Zuerst werden alle Dateien geprüft. Jede gültige geplante
Umbenennung wird als Dictionary in der Liste plaene gespeichert.

Ein Plan enthält:

* den vollständigen Ordnerpfad
* das verwendete Präfix
* den vollständigen Quellpfad
* den bisherigen Dateinamen
* den neuen Dateinamen
* den vollständigen Zielpfad

Der Aufbau im Script sieht so aus:

plaene.append(
    {
        "ordner": ordner,
        "praefix": praefix,
        "quelle": datei,
        "alter_name": datei.name,
        "neuer_name": neuer_name,
        "ziel": ziel_pfad,
    }
)

Dadurch sind Planung und tatsächliche Ausführung voneinander
getrennt.

Im Testmodus werden die gespeicherten Pläne nur angezeigt.

Im Echtmodus erscheint zuerst die gemeinsame Sicherheitsabfrage.
Erst nach der Bestätigung werden die Pläne nacheinander mit
rename() ausgeführt.

Diese Art der Planung ist besonders hilfreich, weil vor der ersten
echten Änderung bereits feststeht, welche gültigen Umbenennungen
vorgesehen sind.

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

10. Zusätzliche Ausgabe einstellen
==================================

Standardmäßig wird nur eine Bildschirmausgabe erstellt:

logdatei_erstellen = False
zwischenablage_verwenden = False

Alternativ stehen vier Ausgabemöglichkeiten zur Verfügung:

Variante 1: Nur Bildschirmausgabe

logdatei_erstellen = False
zwischenablage_verwenden = False

Variante 2: Logdatei erstellen

logdatei_erstellen = True
zwischenablage_verwenden = False

Variante 3: Nur in die Zwischenablage kopieren

logdatei_erstellen = False
zwischenablage_verwenden = True

Variante 4: Logdatei und Zwischenablage verwenden

logdatei_erstellen = True
zwischenablage_verwenden = True

Immer nur die gewünschte Kombination aktiv lassen.

Die Logdateien erhalten einen Zeitstempel, damit vorhandene
Protokolle nicht überschrieben werden.

Beispiele:

umbenennprotokoll_unterordnerinhalt_2026-08-18_14-30-25.log

umbenennprotokoll_sendto_ordnerinhalt_2026-08-18_14-30-25.log

Bei Variante 1 wird das Protokoll im aktuellen Hauptordner
gespeichert.

Bei der SendTo-Variante wird das Protokoll im Ordner des
Python-Scripts gespeichert. Dafür verwendet das Script:

skript_ordner = Path(__file__).resolve().parent

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

11. Mehrzeilige Ausgabe bei langen Pfaden
=========================================

Quell- und Zielpfad werden bei geplanten und ausgeführten
Umbenennungen auf getrennten Zeilen angezeigt.

Beispiel im Testmodus:

WÜRDE UMBENENNEN:
"C:\Test\Rechnungen\beleg001.pdf"
zu
"C:\Test\Rechnungen\Rechnungen_beleg001.pdf"
---

Beispiel im Echtmodus:

UMBENANNT:
"C:\Test\Rechnungen\beleg001.pdf"
zu
"C:\Test\Rechnungen\Rechnungen_beleg001.pdf"
---

Innerhalb eines Python-Textes erzeugt diese Schreibweise einen
Zeilenumbruch:

\n

Die mehrzeilige Darstellung ist besonders bei langen Windows-Pfaden
übersichtlicher als eine einzige lange Ausgabezeile.

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

12. Schutz vor mehrfachen Präfixen und Namenskonflikten
========================================================

Beginnt ein Dateiname bereits mit dem aktuellen Ordnerpräfix, wird
die Datei übersprungen.

Beispiel im Ordner Rechnungen:

Rechnungen_beleg001.pdf

Diese Datei erhält das Präfix Rechnungen_ nicht erneut.

Für die Prüfung werden der Dateiname und das Präfix mit casefold()
vereinheitlicht. Anschließend prüft startswith(), ob das Präfix
bereits am Anfang steht:

if datei.name.casefold().startswith(praefix.casefold()):

Groß- und Kleinschreibung werden dadurch beim Vergleich nicht
beachtet.

Der vorhandene Dateiname wird dabei nicht verändert. Die Prüfung
entscheidet nur, ob die Datei übersprungen wird.

Existiert der geplante Zielname bereits, wird die betreffende Datei
nicht überschrieben, sondern ebenfalls übersprungen.

Beispiel:

beleg001.pdf
Rechnungen_beleg001.pdf

Wenn beide Dateien bereits im Ordner Rechnungen liegen, bleibt
beleg001.pdf unverändert, weil der geplante Zielname schon vorhanden
ist.

Die Prüfung des Zielpfades erfolgt mit:

ziel_pfad.exists()

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

13. Argumente und doppelte SendTo-Pfade
=======================================

Die SendTo-Variante erhält den Testschalter und die ausgewählten
Ordnerpfade über sys.argv.

Mit:

argumente = sys.argv[1:]

werden alle Argumente ab dem zweiten Listeneintrag übernommen. Der
erste Eintrag von sys.argv enthält den Namen des Python-Scripts.

Das Argument --test wird anschließend mit einer ausführlich
geschriebenen for-Schleife aus den übrigen Argumenten
herausgefiltert.

Die entsprechende kurze Python-Schreibweise wird List
Comprehension genannt und ist als Kommentar im Script enthalten.

Für die Erkennung doppelt übergebener Pfade werden zwei Sammlungen
verwendet:

eindeutige_argumente = []
bereits_vorhanden = set()

Die Liste erhält die ursprünglichen Pfade in ihrer Reihenfolge. Das
Set speichert die vereinheitlichten Vergleichspfade und ermöglicht
eine schnelle Prüfung auf bereits vorhandene Einträge.

add() fügt einen Wert zum Set hinzu.

append() hängt einen Wert an eine Liste an.

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

14. Typische Bildschirmausgaben
===============================

Im Testmodus:

WÜRDE UMBENENNEN

Die Datei wurde nur geprüft. Sie wurde nicht verändert.

Im Echtmodus:

UMBENANNT

Die Datei wurde erfolgreich umbenannt.

Bei einer Schutzprüfung:

ÜBERSPRUNGEN

Die Datei beziehungsweise der übergebene Pfad wurde absichtlich
nicht verändert. Mögliche Gründe sind:

* das Präfix ist bereits am Anfang enthalten
* die Zieldatei existiert bereits
* ein übergebener Pfad ist kein Ordner
* eine Laufwerkswurzel wurde übergeben

Bei einem technischen Problem:

FEHLER

Mögliche Ursachen sind beispielsweise:

* fehlende Zugriffsrechte
* eine Datei wird von einem anderen Programm verwendet
* ein Ordner oder eine Datei wurde zwischenzeitlich verschoben
* der Pfad ist nicht mehr verfügbar

Am Ende zeigt jedes Script eine Zusammenfassung mit der Anzahl der
verarbeiteten Ordner, der geplanten beziehungsweise ausgeführten
Umbenennungen, der übersprungenen Dateien und der Fehler.

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

15. Warum gibt es Starter-Batchdateien?
=======================================

Die eigentliche Logik steht in den Python-Dateien mit der Endung
.py.

Die Batchdateien erleichtern den Start per Doppelklick und übernehmen
mehrere vorbereitende Aufgaben:

* UTF-8-Ausgabe mit chcp 65001
* Wechsel in den Ordner der Starter-Batchdatei
* Start von Python mit py
* vorbereitete Alternative mit dem Befehl python
* Erkennung des Testmodus über _test im eigenen Dateinamen
* Übergabe der ausgewählten Ordner bei der SendTo-Variante

Die Starter-Batchdatei prüft mit:

echo %~n0 | find /i "_test" >nul

ob ihr eigener Dateiname _test enthält.

Wenn _test gefunden wird, startet sie das Python-Script zusätzlich
mit:

--test

Bei der SendTo-Variante steht außerdem:

%*

Dieser Platzhalter übergibt alle vom Windows-Explorer empfangenen
Ordnerpfade an das Python-Script.

%~dp0 liefert Laufwerk und Ordner der gerade ausgeführten
Starter-Batchdatei. Mit cd /d wechselt die Batchdatei in diesen
Ordner.

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

16. Wichtige Python-Befehle und Begriffe
========================================

Path.cwd()

Liefert den aktuellen Arbeitsordner als Path-Objekt. Variante 1
verwendet diesen Ordner als Hauptordner.

iterdir()

Liefert die direkt enthaltenen Elemente eines Ordners. Die Scripte
arbeiten dadurch nicht rekursiv.

is_dir()

Prüft, ob ein Pfad ein Ordner ist.

is_file()

Prüft, ob ein Pfad eine Datei ist.

Path.name

Liefert den letzten Namensteil eines Pfades. Bei einem Ordner ist
das der Ordnername, der als Präfix verwendet wird.

casefold()

Vereinheitlicht Texte für einen Vergleich ohne Beachtung der Groß-
und Kleinschreibung.

startswith()

Prüft, ob der Dateiname bereits mit dem aktuellen Präfix beginnt.

exists()

Prüft, ob der geplante Zielpfad bereits vorhanden ist.

Path.resolve()

Ermittelt bei der SendTo-Variante den aufgelösten vollständigen
Ordnerpfad.

Path.absolute()

Bildet einen absoluten Pfad für den Vergleich doppelt übergebener
SendTo-Pfade.

rename()

Benennt die Datei im Echtmodus um.

sys.argv

Enthält die Startargumente des Python-Programms.

Liste

Speichert mehrere Werte in einer festen Reihenfolge. append() hängt
einen neuen Wert an.

Set

Speichert eindeutige Werte. add() fügt einen Wert zum Set hinzu.

Dictionary

Speichert zusammengehörige Informationen unter benannten
Schlüsseln. Jeder Umbenennungsplan ist ein Dictionary.

List Comprehension

Ist eine kompakte Python-Schreibweise zum Erzeugen oder Filtern
einer Liste.

__file__

Enthält den Pfad der gerade ausgeführten Python-Datei. Solche Namen
mit doppelten Unterstrichen werden häufig Dunder-Namen genannt.

datetime.now() und strftime()

Erzeugen den Zeitstempel für den Namen der optionalen Logdatei.

write_text()

Schreibt den Protokolltext mit UTF-8-Codierung in die Logdatei.

subprocess.run()

Startet unter Windows das Programm clip und übergibt den
Protokolltext an die Zwischenablage.

try und except

Fangen erwartbare Datei- und Ordnerfehler kontrolliert ab.

continue

Beendet den aktuellen Schleifendurchlauf und fährt mit dem nächsten
Element fort.

\n

Erzeugt innerhalb eines Python-Textes einen Zeilenumbruch.

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

17. Empfohlener Testablauf
==========================

1. Einen neuen Testordner mit mehreren Unterordnern anlegen.

2. In den Unterordnern einige unwichtige Testdateien erstellen.

3. Bei Variante 1 Python-Script und Starter-Batchdatei gemeinsam in
   den Hauptordner kopieren.

4. Bei Variante 2 die SendTo-Verknüpfung einrichten und die
   gewünschten Testordner im Explorer auswählen.

5. Die jeweilige Starter-Batchdatei zunächst mit _test im Namen
   verwenden.

6. Alle Meldungen mit WÜRDE UMBENENNEN sorgfältig prüfen.

7. Kontrollieren, ob wirklich nur direkte Dateien verarbeitet
   werden und Unterordner unverändert bleiben.

8. Prüfen, ob vorhandene Präfixe oder Zielnamen korrekt erkannt
   werden.

9. Erst danach _test aus dem Namen der passenden
   Starter-Batchdatei entfernen.

10. Die echte Ausführung erneut mit unwichtigen Testdaten testen.

11. Vor der späteren Verwendung mit wichtigen Daten eine aktuelle
    Datensicherung erstellen.

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

18. Wichtige Grenzen dieser Version
===================================

Diese Version wurde bewusst übersichtlich und einsteigerfreundlich
gehalten.

Die Scripte bieten absichtlich:

* keine Rückgängig-Funktion
* kein automatisches Entfernen vorhandener Präfixe
* kein Überschreiben bestehender Zielnamen
* keine rekursive Verarbeitung tieferer Unterordner
* keine automatische Sicherung der umzubenennenden Dateien
* keine Filterung nach Dateiendung, Größe oder Datum
* keine automatische Kürzung zu langer Datei- oder Pfadnamen

Eine Umbenennung verändert normalerweise nicht den Inhalt einer
Datei. Programme, Verknüpfungen oder Projekte können jedoch auf
feste Dateinamen angewiesen sein. Das Umbenennen kann solche
Verknüpfungen ungültig machen.

Durch das zusätzliche Präfix wird der vollständige Pfad länger. Bei
bereits sehr langen Pfaden kann Windows oder ein verwendetes
Programm deshalb die Umbenennung ablehnen.

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

19. Haftungsausschluss
======================

Die Scripte werden zu Lern- und Demonstrationszwecken
bereitgestellt.

Die Verwendung erfolgt auf eigene Verantwortung.

Bitte alle Scripte zuerst mit unwichtigen Testdaten prüfen und vor
der Bearbeitung wichtiger Dateien eine vollständige Datensicherung
erstellen.

Für Datenverluste, fehlerhafte Umbenennungen, unterbrochene
Verknüpfungen oder sonstige Schäden wird keine Haftung übernommen.

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

20. Weitere Informationen
==========================

YouTube-Kanal:
https://www.youtube.com/@TOPTORIALS-OFFICE

Webseite:
https://www.toptorials.com
