drlx28
Goto Top

Batch Rename - Sonderzeichen aus Ordnername entfernen

Hi zusammen,

nach langem Googlen auf unterschiedlichsten Seiten und Foren komme ich einfach nicht mehr weiter.

Ich habe einen Hauptordner mit vielen Unterordnern, diese Unterordner sind alle unterschiedlich vom Namen und Inhalt, haben kein eindeutiges Muster.
Jetzt geht es darum, die Leerzeichen, Komma, Punkte, Klammern, Umlaute äöü etc. aus den Unterordner-Namen zu entfernen.
Ersetzen mit einem Bindestrich (wenn Leerzeichen) bzw. komplett entfernen (bei anderen Sonderzeichen).
Umlaute wie gewohnt mit ae, oe, ue ersetzen.


FolderX\Name Unternehmen GmbH\DateiXYZ.jpg

FolderX\Unternehmen & Co. KG\Logo123.jpg

FolderX\Einzelunternehmen WünschDirWas\Flyer.pdf


Das wäre mal so das größte Problem :D

Sitze echt schon seit Tagen und komme leider auf keinen grünen Zweig...

Freue mich über jede Hilfe! Vielen lieben Dank! face-smile

LG drlx28

Content-Key: 1161937559

Url: https://administrator.de/contentid/1161937559

Printed on: June 16, 2024 at 20:06 o'clock

Member: mbehrens
mbehrens Aug 16, 2021 at 16:16:03 (UTC)
Goto Top
Zitat von @drlx28:

Vielleicht doch das falsche Tool gewählt?

Jetzt geht es darum, die Leerzeichen, Komma, Punkte, Klammern, Umlaute äöü etc. aus den Unterordner-Namen zu entfernen.
Ersetzen mit einem Bindestrich (wenn Leerzeichen) bzw. komplett entfernen (bei anderen Sonderzeichen).
Umlaute wie gewohnt mit ae, oe, ue ersetzen.

Als Denkanstoß:

Get-ChildItem *.txt | Rename-Item -NewName { $_.Name -replace '#%&','_' }  
Member: TK1987
TK1987 Aug 17, 2021, updated at Aug 18, 2021 at 06:55:53 (UTC)
Goto Top
Moin,

Zitat von @drlx28:
Ersetzen mit einem Bindestrich (wenn Leerzeichen) bzw. komplett entfernen (bei anderen Sonderzeichen).
Umlaute wie gewohnt mit ae, oe, ue ersetzen.
sind Unterstriche für dich Sonderzeichen oder erlaubt?

Batch ist definitiv die falsche Wahl -> Powershell (hier Unterstriche erlaubt)
# Quellordner
$Source = "C:\Test"  

# Zeichen ersetzen
$Chars = @{
  'ä' = 'ae'  
  'ö' = 'oe'  
  'ü' = 'ue'  
  'ß' = 'ss'  
  ' ' = '-'  
}

# Regex-Replacefunktion
$Replace = {
  Param($m)

  # Falls Ä/Ö/Ü = Großbuchstabe, A/O/U ebenfalls groß
  @{$true='{0}e' -f $Chars.($m.Value).Substring(0,1).ToUpper() ; $false=$Chars.($m.Value)}[ [char]::IsUpper($m.Value) ]  
}

# Alle Ordner und Unterordner auflisten, die entsprechende Zeichen enthalten
$dirs = Get-ChildItem $Source -Directory -Recurse | Where-Object {$_.Name -Match '[^a-zA-Z0-9\-_]'}  

# Ordner sortieren (tiefste Ordner zuerst behandeln)
$dirs = $dirs | Sort -descending -property {$_.Fullname.length}

# Für jeden Ordner...
$Renamed = Foreach ($dir in $dirs) {
  
  # Objekt mit folgenden Eigenschaften erstellen...
  [pscustomobject]@{
    
    # Alter Dateiname
    Oldname = $dir.Name
  
    # Datei umbenennen und neuen Dateipfad ausgeben
    NewPath = (Rename-Item -PassThru -Path $dir.fullname -NewName ([regex]::Replace($dir.Name,'(?i)[äöüß ]',$Replace) -Replace '[^a-zA-Z0-9\-_]')).Fullname  
    
  }
}

# Umbenannte Dateien als CSV-Liste Exportieren
$Renamed | Export-Csv -Delimiter ';' -NoTypeInformation "$Home\Desktop\Renamed.csv"  
Nach dem umbenennen erstellt er dir auf deinem Desktop eine Renamed.Csv, so besteht zumindest noch die Möglichkeit das Ganze wieder Rückgängig zu machen - testen solltest du das Ganze vorher aber trotzdem erstmal.

Gruß Thomas
Member: drlx28
drlx28 Aug 18, 2021 at 13:03:18 (UTC)
Goto Top
Super, vielen Dank! Werde ich testen face-smile