Dateien umbenennen - Konsole oder Software

DHC schrieb:
Mit Vorschau meinte ich, das in Skript 1 erst nur eine Ausgabedatei (txt) generiert wird, dass entweder die Dateinamen vor und nach der Umbenennung beinhaltet.
Ja, schon gemerkt.
Write-Host durch Write-Output ersetzt.
Also:
Write-Output "Vorschau: '$($_.FullName)' wuerde zu '$neuerVollerPfad' umbenannt werden."

Wenn man jetzt das Script aufruft mit

.\deinscriptname.ps1 >vorschau.txt

dann werden die voraussichtlichen Umbenennungen in die Datei vorschau.txt gespeichert.
Dort kannst du dann in Ruhe die Änderungen vorab kontrollieren.

Das noch als deinregname.reg speichern und danach anklicken und neustarten.
Code:
Windows Registry Editor Version 5.00
; PowerShell Skriptausführung aktivieren
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell]
"ExecutionPolicy"="RemoteSigned"
"EnableScripts"=dword:00000001

Soll jetzt kein Vorwurf sein, dachte du bist mit registriert seit 2013 kein Bambi mehr;)
 
Zuletzt bearbeitet:
JennyCB schrieb:
Soll jetzt kein Vorwurf sein, dachte du bist mit registriert seit 2013 kein Bambi mehr
Ich spiele ungern an der Registry rum.
Nutze deshalb auch keine Schlangenölprogramme, etc.

Ich halte das System clean.
Wie oben beschrieben.
Kurz die Berechtigungen erteilen.
Skript ausführen.
Danach alles wieder rückgängig machen
 
Um PowerShell-Scripts .ps1 kommt man heute bei Microsoft kaum vorbei.
Deshalb ist das hier immer aktiviert.
Du darfst die .reg-Datei danach gerne wieder ändern in:
Code:
Windows Registry Editor Version 5.00
; PowerShell Skriptausführung entfernen
[-HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell]

vorschau.txt
Code:
Vorschau: 'D:\Dateiname-01.01.1974.doc' wuerde zu 'D:\Dateiname - 1974-01-01.doc' umbenannt werden.
Vorschau: 'D:\Unterverzeichnis\Dateiname  01.01.1971.doc' wuerde zu 'D:\Unterverzeichnis\Dateiname - 1971-01-01.doc' umbenannt werden.
Vorschau: 'D:\Unterverzeichnis\Dateiname - 01.01.1973.doc' wuerde zu 'D:\Unterverzeichnis\Dateiname - 1973-01-01.doc' umbenannt werden.
Vorschau: 'D:\Unterverzeichnis\Dateiname, 01.01.1970.doc' wuerde zu 'D:\Unterverzeichnis\Dateiname - 1970-01-01.doc' umbenannt werden.
Vorschau: 'D:\Unterverzeichnis\Dateiname; 01.01.1972.doc' wuerde zu 'D:\Unterverzeichnis\Dateiname - 1972-01-01.doc' umbenannt werden.
 
Zuletzt bearbeitet:
Damit das ganze besser zu lesen ist, zum Thema Augenkrebs, wegen Buchstabensalat, habe ich den Output etwas abgeändert.

PowerShell:
        # Bestätigung ausgeben: Alter und neuer Dateiname
        Write-Output "$($_.FullName)"
        Write-Output "$neuerVollerPfad"
        Write-Output ""

Das sieht dann so aus:
  • Alter Dateiname (Voll)
  • Neuer Dateiname (Voll)
  • Leerzeile

Noch eine Frage.
Muss der neue Dateiname voll qualifiziert sein? Sprich mit Verzeichnisangabe?

Ich meine, das man früher unter DOS, nur den Ziel-Dateinamen ohne Verzeichnis (Voll qualifiziert) angeben konnte.

Z. B.:
Code:
ren C:\altername.txt neuername.*
 
Learn PowerShell Microsoft.PowerShell.Management Rename-Item

-NewName​

Gibt den neuen Namen des Elements an. Geben Sie nur einen Namen ein, nicht einen Pfad und einen Namen. Wenn Sie einen Pfad eingeben, der sich vom Pfad unterscheidet, der im Parameter "Path " angegeben ist, Rename-Item wird ein Fehler generiert. Um ein Element umzubenennen und zu verschieben, verwenden Sie Move-Item.

Sie können keine Wildcardzeichen im Wert des NewName-Parameters verwenden. Um einen Namen für mehrere Dateien anzugeben, verwenden Sie den Replace-Operator in einem regulären Ausdruck. Weitere Informationen zum Replace-Operator finden Sie unter about_Comparison_Operators.
 
DHC schrieb:
Code:
ren C:\altername.txt neuername.*
Ja geht so. ren "C:\Unterverzeichnis\altername.txt" "neuername.txt"

Code:
Get-ChildItem -Path "D:\" -File -Recurse | ForEach-Object {
    # Extrahiere den Dateinamen und die Erweiterung
    $dateiName = $_.BaseName
    $erweiterung = $_.Extension

    # Überprüfe, ob der Dateiname das Muster "dd.mm.yyyy" enthält
    if ($dateiName -match '\b(\d{2})\.(\d{2})\.(\d{4})\b') {
        # Extrahiere Tag, Monat und Jahr aus dem Dateinamen
        $tag = $matches[1]
        $monat = $matches[2]
        $jahr = $matches[3]

        # Ersetze den Datumsbereich mit dem neuen Format "yyyy-mm-dd"
        $neuerDateiName = $dateiName -replace '\b(\d{2})\.(\d{2})\.(\d{4})\b', "$jahr-$monat-$tag"

        # Ersetze alle nicht-alphanumerischen Zeichen vor dem Datum mit einem Bindestrich
        $neuerDateiName = $neuerDateiName -replace '[^a-zA-Z0-9]+(?=\d{4}-\d{2}-\d{2})', ' - '

        # Bestimme das Verzeichnis, in dem die Datei sich befindet
        $verzeichnis = $_.DirectoryName

        # Setze den vollständigen neuen Dateinamen (inklusive Erweiterung)
        $vollstaendigerNeuerDateiName = "$neuerDateiName$erweiterung"
        $counter = 1

        # Überprüfe, ob die Datei mit dem neuen Namen bereits existiert
        while (Test-Path -Path (Join-Path $verzeichnis $vollstaendigerNeuerDateiName)) {
            # Füge eine laufende Nummer hinzu, falls die Datei bereits existiert
            $vollstaendigerNeuerDateiName = "$neuerDateiName-$counter$erweiterung"
            $counter++
        }

        # Vollständiger Pfad der neuen Datei
        $neuerVollerPfad = Join-Path $verzeichnis $vollstaendigerNeuerDateiName

        # Nur die Vorschau anzeigen, ohne Umbenennung
        Write-Output "ren ""$($_.FullName)"" ""$vollstaendigerNeuerDateiName""" >vorschau.txt
    }
}

vorschau.txt
Code:
ren "D:\Unterverzeichnis\Dateiname; 01.01.1972.doc" "Dateiname - 1972-01-01.doc"
 
Zuletzt bearbeitet:
Zurück
Oben