Powershell: Dateien mit Präfix umbennen
Ich stand einmal vor dem Problem über 200 Dateien auf einmal umbennen zu müssen. Allerdings sollte der Original Name erhalten bleiben. Wie fügt man denn nun ein Präfix vor einen Dateinamen ohne jede Datei einzeln auszuwählen „F2“, „POS1“, Prafix einfügen, „ENTER“
Bei dem Versuch es mit Batch zu machen bin ich darauf gestoßen das das Batchscript zwar das Präfix eingefügt hat aber nicht mittels INSERT sondern mittels REPLACE. Das Präfix von 3 Zeichen hat also den Platz der ersten 3 Zeichen eingenommen. Das ist witzig zu wissen das das nun auch geht aber damit war mein Problem aber nicht gelöst.
Ich nutze hierzu folgende zwei Befehle in Powershell:
Get-ChildItem FOLDERPATH\*.FILEEXTENSIONGepipet wird dann der OUTPUT und mittels Rename-Item Datei für Datei umbennant. Vollständig sieht das dann folgendermaßen aus:
Get-ChildItem FOLDERPATH\*.FILEEXTENSION | Rename-Item -NewName{ $_.Name -replace '^','PRÄFIX' }Ich hatte zum Beispiel die drei Ordner H0, H1 und H2 und in denen befanden sich .b01 Dateien. Jeweils von hdr-01.b01 bis hdr-99.b01. Um diese nun aber gleichzeitig verarbeiten zu können brauche ich diese alle in einem Ordner. Ich wollte also Dateien haben die so aussahen:
| H0_hdr-01.b01 | H1_hdr-01.b01 | H2_hdr-01.b01 |
| … | … | … |
| H0_hdr-99.b01 | H1_hdr-99.b01 | H2_hdr-99.b01 |
Wie kann ich also bei einem REPLACE Befehl etwas auswählen ohne den Dateinamen zu verwenden? Vllt kenn ich die Dateinamen noch nicht oder diese sind nicht einheitlich vorne bzw. hinten (bei Suffixen).
Hierzu nehme ich den kleinen Placeholder „^“ für Präfixe und „$“ für Suffixe.
das sieht dann so aus:
(Get-ChildItem H0\*.b01) | Rename-Item -NewName{ $_.Name -replace '^','H0_' }
(Get-ChildItem H1\*.b01) | Rename-Item -NewName{ $_.Name -replace '^','H1_' }
(Get-ChildItem H2\*.b01) | Rename-Item -NewName{ $_.Name -replace '^','H2_' }Natürlich gibt es auch die Variante mit dem ich an das Präfix den Original Name nochmal dranhänge. Die finde ich aber nicht sooooooo schön.
(Get-ChildItem FOLDERPATH) | Rename-Item -NewName {"PRÄFIX" + $_.Name}Jetzt möchte ich natürlich nicht außen vorlassen das es noch folgende Varainten gibt auf die ich ich nicht näher eingehe:
# Suffix einfügen
(Get-ChildItem FOLDERPATH) | Rename-Item -NewName {$_.BaseName + "SUFFIX" + $_.Extension}
# Löschen von Zeichenfolgen im Namen. Mittels ersetzen von nichts
(Get-ChildItem FOLDERPATH) | Rename-Item -NewName {($_.Name).Replace("XYZ","")}
# Löschen von einer doppelten Dateiendung. Nur bei denen die eine doppelte haben*/
(Get-ChildItem FOLDERPATH) | Where-Object {$_.Extension -and $_.BaseName -like "*$($_.Extension)"} | Rename-Item -NewName {$_.BaseName}