Mehrere Dateien umbenennen mit Dateiendung?

1 Antwort

aber nicht wenn alle Dateien verschiedene Endungen haben

doch.. natürlich geht das.

ren "dateiI1.zip.*" "*.*.html"

dafür gibt es die Joker (Wildcards * und ?)

demo.cmd

::mal zum testen  ein paar durchnummerierte Dateien erzeugen
for /l %%a in (1,1,10) do (echo: >"dateiIrgentwas.zip.%%a")

::diese in einem rutsch umbenennen...🤪
ren "dateiIrgentwas.zip.*" "*.*.html"

natürlich böd wenn au neben den Zahlen am Ende auch noch andere Dateien nach dem Muster existieren, welche unangetastet bleiben sollen.

Das könnte man mit einer Forschleife und etwas fiedeln auch in Batch lösen, aber dafür hab ich heute keinen Lust.

Windows hat mit Powershell ein viel mächtigeres Werkzeug als Cmd bieten könnte...

da geht das so...

#wieder ein paar DemoDateien basteln
1..10|%{New-Item -Name $('DemoFile1.zip.{0:D3}'-f $_) -ItemType File}
#und  ein paar, welche  wir in Ruhe lassen wollen
1..10|%{New-Item -Name $('DemoFile1.zip.{0}'-f $_) -ItemType File}

...und verarbeten...

Get-ChildItem 'DemoFile1.zip.*'| #ersmal alle mit irgendwas am Ende... das  ist (in diesem Fall) nicht fein genug, 
    Where-Object {$_.Name -match '^.+\d{3}$'}| #darum davon nur  die mit den 3! Ziffern per RegEx in einem "Where-object"-filter aussieben.
    ForEach-Object {
        Rename-Item $_ -NewName "$($_.Name).html" -whatif  #...und  ins  neue Muster  umbenennen
    }

(-whatif ist zum probieren ohne Wirkung , zum Scharf machen entfernen!)

Wer will den Romane Schreiben....? das geht auch so:

gci 'DemoFile1.zip.*'|?{$_.Name -match '^.+\d{3}$'}|%{ren $_ -NewName "$($_.Name).html"}

natürlich kannst du auch Ziffern gegen Buchstaben tauschen oder sonst was:

#ein kleines Macro  zum ersetzen  von Zahlen durch  Buchstaben😆
$NumberToLetter={ param($m) [char] ([int] [char] 'A' + [int] $m.Value) }
Get-ChildItem 'DemoFile1.zip.*'| Where-Object {$_.Name -match '^.+\d{3}$'}| ForEach-Object {
        $NewExtension=[regex]::Replace($_.Extension, '\d',$NumberToLetter)
        Rename-Item $_ -NewName "$($_.BaseName)$NewExtension)" -whatif 
}

naja wieder kurz (aber kaum lesbar)

gci 'DemoFile1.zip.*'| ?{$_.Name -match '^.+\d{3}$'}|%{ $ne=[regex]::Replace($_.Extension, '\d',{ param($m) [char] ([int] [char] 'A' + [int] $m.Value) });Rename-Item $_ -NewName "$($_.BaseName)$ne"}

ergebnis

WhatIf: Ausführen des Vorgangs "Datei umbenennen" für das Ziel "Element: C:\Users\Erzesel Secure\Desktop\Neuer Ordner (4)\DemoFile1.zip.002 Ziel: C:\Users\Erzesel Secure\Desktop\Neuer Ordner (4)\DemoFile1.zip.AAC".
WhatIf: Ausführen des Vorgangs "Datei umbenennen" für das Ziel "Element: C:\Users\Erzesel Secure\Desktop\Neuer Ordner (4)\DemoFile1.zip.003 Ziel: C:\Users\Erzesel Secure\Desktop\Neuer Ordner (4)\DemoFile1.zip.AAD".
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren