TOPTORIALS OFFICE - PowerShell 7 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-15

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

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

Diese Scripte benennen Dateien mit PowerShell 7 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
* PowerShell 7
* Schreibberechtigung für die zu bearbeitenden Dateien und Ordner

PowerShell 7 kann beispielsweise mit winget installiert werden:

winget install --id Microsoft.PowerShell --source winget

Nach der Installation sollte die Eingabeaufforderung neu gestartet
werden.

Mit folgendem Befehl kann geprüft werden, ob PowerShell 7 verfügbar
ist:

pwsh --version

Die Starter-Batchdateien verwenden den Befehl:

pwsh

Damit wird gezielt PowerShell 7 und nicht die ältere Windows
PowerShell 5.1 gestartet.

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

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

006_Ordnername_als_Praefix

01_Unterordnerinhalt_mit_Ordnername_umbenennen
006_unterordnerinhalt_mit_ordnername_umbenennen.ps1
006_unterordnerinhalt_mit_ordnername_umbenennen_starter_batch_test.bat

02_SendTo_Ordnerinhalt_mit_Ordnername_umbenennen
006_sendto_ordnerinhalt_mit_ordnername_umbenennen.ps1
006_sendto_ordnerinhalt_mit_ordnername_umbenennen_starter_batch_test.bat

README.txt

Die Dateien mit der Endung .ps1 enthalten die eigentliche
PowerShell-Logik.

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

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

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
PowerShell-Script mit dem Schalter -Test gestartet.

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

Groß- und Kleinschreibung wird bei dieser Prüfung von PowerShell
standardmäßig ignoriert. Deshalb werden beispielsweise auch diese
Eingaben akzeptiert:

ja
Ja
jA

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 PowerShell-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:

$neuerName = $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.

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

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.ps1
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 PowerShell-Script ermittelt 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.ps1
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 Select-Object -Unique entfernt.

Werden statt Ordnern einzelne Dateien übergeben, werden diese als
ungültige Ü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 - Ordnerinhalt mit Ordnername als Präfix

Danach erscheint sie im Windows-Explorer unter:

Rechtsklick auf markierte Ordner
Senden an

Wichtig:

Die eigentliche PowerShell-Datei und die Starter-Batchdatei sollten
an ihrem festen Speicherort zusammenbleiben.

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

Nach dem Test kann _test aus dem Namen der echten
Starter-Batchdatei entfernt werden. Anschließend sollte die
SendTo-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 PSCustomObject 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 += [PSCustomObject]@{
    Ordner    = $ordner.FullName
    Praefix   = $praefix
    Quelle    = $datei.FullName
    AlterName = $datei.Name
    NeuerName = $neuerName
    Ziel      = $zielPfad
}

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-Item 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:

$logDateiErstellen = $false
$zwischenablageVerwenden = $false

Alternativ stehen vier Ausgabemöglichkeiten zur Verfügung:

Variante 1: Nur Bildschirmausgabe

$logDateiErstellen = $false
$zwischenablageVerwenden = $false

Variante 2: Logdatei erstellen

$logDateiErstellen = $true
$zwischenablageVerwenden = $false

Variante 3: Nur in die Zwischenablage kopieren

$logDateiErstellen = $false
$zwischenablageVerwenden = $true

Variante 4: Logdatei und Zwischenablage verwenden

$logDateiErstellen = $true
$zwischenablageVerwenden = $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-15_14-30-25.log

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

Bei Variante 1 wird das Protokoll im Hauptordner gespeichert.

Bei der SendTo-Variante wird das Protokoll im Ordner des
PowerShell-Scripts gespeichert.

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

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:
Quelle: "C:\Test\Rechnungen\beleg001.pdf"
Ziel:   "C:\Test\Rechnungen\Rechnungen_beleg001.pdf"
---

Beispiel im Echtmodus:

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

Innerhalb eines PowerShell-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.

Die Prüfung ignoriert Groß- und Kleinschreibung. Dafür wird
StartsWith zusammen mit folgender Vergleichsart verwendet:

[System.StringComparison]::OrdinalIgnoreCase

Dadurch gelten beispielsweise diese Präfixe bei der Prüfung als
gleich:

Rechnungen_
RECHNUNGEN_
rechnungen_

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.

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

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

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

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

Die eigentliche Logik steht in den PowerShell-Dateien mit der Endung
.ps1.

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 über PowerShell 7 mit pwsh
* 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 PowerShell-Script mit:

-Test

Bei der SendTo-Variante steht zusätzlich:

%*

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

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

15. Wichtige PowerShell-Befehle und Begriffe
============================================

Get-Location

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

Get-ChildItem

Liest Ordner oder Dateien ein. Mit -Directory werden nur Ordner und
mit -File nur Dateien übernommen.

Get-Item

Liest bei der SendTo-Variante einen übergebenen Ordner als
PowerShell-Objekt ein.

-LiteralPath

Behandelt einen Pfad wörtlich. Sonderzeichen im Pfad werden dadurch
nicht als Platzhalter interpretiert.

-Force

Bezieht auch versteckte Elemente in die Ermittlung ein, sofern der
Zugriff darauf möglich ist.

Test-Path

Prüft, ob ein übergebener Ordner oder ein geplanter Zielpfad
existiert.

Join-Path

Verbindet den Ordnerpfad mit dem neu gebildeten Dateinamen zu einem
vollständigen Zielpfad.

StartsWith()

Prüft, ob ein Dateiname bereits mit dem jeweiligen Ordnerpräfix
beginnt.

OrdinalIgnoreCase

Führt den Vergleich ohne Beachtung der Groß- und Kleinschreibung und
ohne sprachabhängige Textumwandlung durch.

Rename-Item

Benennt im Echtmodus die Datei um.

PSCustomObject

Speichert eine geplante Umbenennung mit Ordner, Präfix, Quelle,
altem Namen, neuem Namen und Zielpfad.

Select-Object -Unique

Entfernt bei der SendTo-Variante doppelt übergebene Pfade.

ValueFromRemainingArguments

Sorgt dafür, dass die von der Starter-Batchdatei übergebenen Pfade
im Parameter $Elemente gesammelt werden.

try und catch

Fangen Fehler kontrolliert ab. Das Script kann dadurch eine
verständliche Fehlermeldung ausgeben und weitere Dateien
verarbeiten.

Set-Content

Schreibt das optionale Protokoll als UTF-8-Text in eine Logdatei.

Set-Clipboard

Kopiert das optionale Protokoll in die Windows-Zwischenablage.

continue

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

`n

Erzeugt innerhalb eines PowerShell-Textes einen Zeilenumbruch.

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

16. Empfohlener Testablauf
==========================

1. Einen neuen Testordner mit mehreren Unterordnern anlegen.

2. In den Unterordnern einige unwichtige Testdateien erstellen.

3. Bei Variante 1 beide Scriptdateien 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.

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

17. 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.

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

18. 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.

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

19. Weitere Informationen
==========================

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

Webseite:
https://www.toptorials.com
