silentmexx
Goto Top

Dateiname auslesen und nur bestimmte Dateien umbenennen

Hallo,

bei mir gibt es in einigen Ordnern Dateien, die mit einem "_" getrennt sind. Einige davon haben 4, andere 5 Textbausteine im Dateinamen. Hier sollten jetzt nur diese Dateien mit 5 Textbausteinen umbenannt werden. Diese soltlen nun mit Hilfe einer Bacth-Datei umbenannt werden.

z.B. gibt es folgende Dateien:

a_b_c_d.jpg
a_b_c_d_e.jpg

Alle Dateien mit 4 Bausteinen im Dateinamen sollen gleich bleiben, bei den Dateien mit 5 Bausteinen sollen 2 Bausteine vertauscht werden, also sollte es dann wie folgt aussehen:

a_b_c_d.jpg
a_b_d_c_e.jpg

Das mit dem Umbennen klappt schon, aber ich weiss nicht genau, wie man bei einer for Schleife die unterschiedliche Zahl der Bausteine, die mit Unterstrichen getrennt sind zählt und nur bei einer bestimmten Anzahl umbennent.

Vielen Dank
silentmexx

Content-Key: 217799

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

Printed on: April 25, 2024 at 21:04 o'clock

Member: LordXearo
LordXearo Sep 25, 2013 updated at 07:19:19 (UTC)
Goto Top
Morgen,

also ich bin ja schon lange dafür nicht mehr Batch zu benutzen und auf PowerShell umzusteigen.

$Dateiname = "Datei1_abc_123_xxx_2509.jpg"  
$Dateiname.Split("_") | Measure-Object  

Oder
[regex]::matches($Dateiname,"_").count  

Viel Erfolg

Xearo
Member: Endoro
Endoro Sep 25, 2013 updated at 08:56:49 (UTC)
Goto Top
Hi, das sollte gehen:
@echo off &setlocal
for /f "tokens=1-4* delims=_" %%a in ('dir /b /a-d "*_*_*_*_*.jpg"') do (  
	echo ren "%%a_%%b_%%c_%%d_%%e" "%%a_%%b_%%d_%%c_%%e"   
)
Wenn die Ausgabe iO ist noch das echo löschen.
lg.
Member: colinardo
colinardo Sep 25, 2013 at 10:23:13 (UTC)
Goto Top
Moin,
nur der vollständigkeit halber noch ein funktionsfähiges Powershell-Script (Pfad zu den Dateien in Zeile 1 angeben):
$path = 'E:\temp'  
$files = dir $path | ?{$_.Name -match "(.*)_(.*)_(.*)_(.*)_(.*)\.([^\.])+" -and !($_.PSIsContainer)}  
foreach($file in $files){
    $newName = $file.Name -replace '(.*)_(.*)_(.*)_(.*)_(.*)\.([^\.]+)','$1_$2_$4_$3_$5.$6'  
    $file | Rename-Item -NewName $newName
}

Grüße Uwe