Powerrename Syntax (yyyxxxzzz.txt ---> yyy.txt) Wie geht das?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

RegEx:

^(.*)x(.*)(\..*)$

Startposition:

Bild zum Beitrag

Nachdem die Umbenennung stattgefunden hat:

Bild zum Beitrag

Alles ab x wurde abgetrennt. Alles in (Klammern) sind Gruppen. Gruppe 1 enthält alles vor x und Gruppe 3 alles ab dem letzten Punkt, also die Dateierweiterung. Somit baut $1$3 den neuen Namen zusammen aus diesen Gruppen. Den Boost Bibliotheken Modus habe ich aus. Sollte aber eigentlich kein Problem sein.

Verwendet: PowerRename

Edit: Nach ein wenig weiter probieren kam ich auf ein sogar noch besseres Ergebnis. Der neue RegEx ist:

^(.*?)x(.*)$

Dieser RegEx bezieht sich nur auf den Dateinamen und nicht auf die Dateiendung. Ordner haben keine Dateiendung, deshalb sollten diese beim ersten ignoriert werden, hier aber nicht.

Neues Setup:

Bild zum Beitrag

Ergebnis:

Bild zum Beitrag

Hier wurde es auf Filename only gestellt und alle Ordner und Dateien wurden umbenannt. Wichtig ist, dass Reguläre Ausdrücke angehakt wird.

 - (Computer, Technik, Windows)  - (Computer, Technik, Windows)  - (Computer, Technik, Windows)  - (Computer, Technik, Windows)

maximilian15366 
Beitragsersteller
 24.05.2023, 15:45

Danke dir hat super funktioniert. Hast du vielleicht eine Webseite wie ich mir das auch beibringen kann einfach (am besten auf deutsch, aber Englisch geht auch)

FaTech  24.05.2023, 16:46
@maximilian15366

Regexr.com bietet meiner Meinung nach eine gute Erklärung und Regex Tester. Ansonsten vielleicht ein paar YouTube Videos für Regex Basics

Im Prinzip mit ein paar Zeilen Powershell zu erledigen:

demo.ps1

$BasePath='C:\Users\Erzesel Secure\Desktop\test' #hier dein ausgangspfad
$SplitPattern='xxx' #zeichenfolge (RegEx) die zum Zerteilen des Namens dient


Get-ChildItem $BasePath -File -Recurse|
  ForEach-Object {
      $NewBaseName=$_.Basename -split $SplitPattern | select -First 1  #string am Splitpattern teilen und  nur das erste stück verwenden
      $MyNewName=$NewBaseName + $_.Extension #Neuen Namen zusamenbauen
      Write-Host "$($_.FullName) => $MyNewName"
      Rename-Item -Path $_.FullName -NewName $MyNewName #aktuelle Datei umbenennen
  }

pause

das war die hübsche Variante , aber es geht auch Quick&Dirty:

gci 'C:\dein\pfad' -File -r| ren -new {($_.Basename -split 'xxx')[0] + $_.Extension}

...allerdings hat die Sache einen Pferdefuß (egal in welcher Programmiersprache):

den resultierenden Namen darf es nur einmal geben! Wenn sich bei der Operation stets der gleiche Dateiname ergibt, wird nur die erste Datei im Ordner umbenannt und dann hagelt es Fehlermeldungen.

Wenn der zum trennen vorgesehene String (von Dir als xxx angegeben) verschieden ist , frag noch mal nach -split arbeitet mit RegEx. RegEx-Pattern sind extrem flexibel.

um ein passendes Regexmuster zu finden müsstet Du aber ein paar realistische beispiele für die AusgangsDateinamen liefern.


Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren