Powerrename Syntax (yyyxxxzzz.txt ---> yyy.txt) Wie geht das?
Hallo ich will folgendes umbenennen: Jede Datei (am besten auch jede im Unterordner die x enthält)
Alter Dateiname: yyyxxxzzz.txt
Neuer: yyy.txt
Also Endung soll gleich bleiben. Alles ab x und rechts von x entfernen. Endung soll gleich bleiben.
Danke schon einmal gerne auch in einem anderen Programm falls powerrename das mit Unterordner nicht unterstützen sollte.
2 Antworten
RegEx:
^(.*)x(.*)(\..*)$
Startposition:
Nachdem die Umbenennung stattgefunden hat:
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:
Ergebnis:
Hier wurde es auf Filename only gestellt und alle Ordner und Dateien wurden umbenannt. Wichtig ist, dass Reguläre Ausdrücke angehakt wird.
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.
- https://learn.microsoft.com/de-de/powershell/module/microsoft.powershell.management/get-childitem?view=powershell-5.1
- https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/rename-item?view=powershell-5.1
- https://www.regexe.de/hilfe.jsp
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)