rannseier2
Goto Top

Dateinamenbereinigung per Batch

Hallo,

Ich habe (leider) eine 2TB-Platte mit einer ganzen Menge unsortiertem Kram "geerbt". Während der Inhalt zum Großteil brauchbar ist sind es die Dateinamen nicht.

Ich möchte gerne eine Batchdatei schreiben und Rekursiv alle DAteinamen und Verzeichsnamen bereinigen.

Ein Teil der Dateinamen brauche ich nur am Anfang zu bereinigen, Beispiel:

xyz-blabla.txt soll zu
blabla.txt werden.

Auch sollen alle Punkte zu Leerzeichen werden und doppelte Leerzeichen zu einem Zusammengefassst werden.

Die letzten Batchs habe ich 96 auf einem Amiga geschrieben, weiss jemand wie man sowas via Batch unter Win/Kommandozeile realsiert?


Gruß,
Karl

Content-Key: 158408

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

Ausgedruckt am: 28.03.2024 um 08:03 Uhr

Mitglied: mathe172
mathe172 11.01.2011 um 20:09:50 Uhr
Goto Top
Hallo rannseier2!

Versuchs mal damit(Leerzeichen find ich zwar nicht so schön...):
@echo off & setlocal enabledelayedexpansion
set "Drive=E:\"  

for /R "%Drive%" %%A in ("*.*") do (  
call :CleanName "%%~nA"  
echo ren "%%A" "!Name!%%~xA"  
REM Das echo für Tatsächlichen Gebrauch löschen
)
pause
goto :eof

:CleanName
set "Name=%~1"  
for /F "tokens=1* delims=-" %%B in ("%Name%") do set "Name=%%C"  
set "Name=%Name:.= %  
set "Name=%Name:  = %"  
goto :eof

Mathe172
Mitglied: pieh-ejdsch
pieh-ejdsch 11.01.2011 um 20:36:03 Uhr
Goto Top
moin mathe,

da is noch was...Leerzeichen.
mach mal aus Zeile 06.
echo ren %%A "!Name!%%~xA"

Gruß Phil
Mitglied: mathe172
mathe172 11.01.2011 um 20:41:20 Uhr
Goto Top
Hallo Phil!

Danke fürs Draufaufmerksam machen face-smile -Habs jetzt verbessert.

Mathe172
Mitglied: Friemler
Friemler 11.01.2011, aktualisiert am 18.10.2012 um 18:45:28 Uhr
Goto Top
Hallo Karl,

ich vermute mal ganz frech, dass es sich beim Inhalt Deiner Platte um ähh... bewegte Bilder handelt (hüstel). Kenne solche Machwerke. Hauptsache mal alles gesammelt, was sich kriegen lässt, die Benennung ist erstmal egal. Dem Namenschaos mit Batchskript Herr zu werden, ist ein schwieriges Unterfangen, da es kein durchgängiges Benennungsschema gibt. Ich würde Dir ein Tool zum massenweise umbenennen von Dateien empfehlen (als Stichwörter KRename, RenameMaster, Bulk Rename Utility), einfach mal Google fragen und darauf achten, dass Deine Betriebssystemversion unterstützt wird.

Oder Du nimmst FreeCommander, ein kostenloser TotalCommander-Clon. Dort kannst Du eine Flat-Ansicht der Ordnerstruktur einstellen, d.h. Du siehst alle Dateien auf der Platte, auch die, die in Unterverzeichnissen liegen. Dann markierst Du alle oder nur die, deren Namen ungefähr gleich chaotisch sind und startest das eingebaute Massen-Umbenennungsutility. Dort kannst Du verschiedene Einstellungen machen, nach welchen Regeln umbenannt werden soll und siehst eine Vorschau des Ergebnisses sowie evtl. auftretende Namenskonflikte. Ist aber nicht so mächtig wie die darauf spezialisierten Tools.

Hier gibts auch einen Tipp zum Thema mit der Nennung von mehreren Umbenennungs-Tools.

Viel Erfolg!

Gruß
Friemler
Mitglied: rannseier2
rannseier2 11.01.2011 um 22:45:59 Uhr
Goto Top
Hallo,

Die Scripte sehen schonmal ganz gut aus.

Wie kann ich am besten String aus dem Dateinamenanfang entfernen?


Gruß,
Karl


PS: Sich nicht nur Urlaubsvideos sondern auch noch andere "Errungenschaften".
Mitglied: bastla
bastla 11.01.2011 um 23:38:32 Uhr
Goto Top
@mathe172
... und nur für den Fall, dass es noch weitere "-" im Namen gäbe (und diese und die Namensteile danach erhalten bleiben sollen):
for /F "tokens=1* delims=-" %%B in ("%Name%") do set "Name=%%C"
Grüße
bastla
Mitglied: mathe172
mathe172 12.01.2011 um 10:18:23 Uhr
Goto Top
@Biber: Habs oben geändert face-smile

@rannseier2: Der erste String bis zum "-" wird doch gelöscht...

Mathe172
Mitglied: rannseier2
rannseier2 12.01.2011 um 16:15:03 Uhr
Goto Top
@mathe172:

Ach so, dann habe ich mich wohl falsch ausgedrückt. Das xyz- sollte nur ein Bindestrich sein, es gibt durchaus Prefixe die erhalten bleiben sollen. Ich dachte an was wo ich dann z.B. nach xyz- und xzy- Suche und dieses lösche aber z.B. abc- gar nicht antaste. Geht das irgendwie?


Gruß,
Karl
Mitglied: mathe172
mathe172 12.01.2011 um 16:45:51 Uhr
Goto Top
Hallo rannseier2!

Versuchs mal damit:
@echo off & setlocal enabledelayedexpansion
set "Drive=E:\"  
REM Alle Suchen-Ersetzen-Paare. Bsp: Suche:"  " Ersetze mit:" " Achtung: Zeichen wie = escapen: ^=  
set "Str1=  "  
set "Ers1= "  
set "Str2=."  
set "Ers2= "  

for /F "tokens=1 delims=Str=" %%A in ('set Str') do if !last! lss %%A set "Last=%%A"  
for /R "%Drive%" %%A in ("*.*") do (  
call :CleanName "ÿ%%~nA"  
echo ren "%%A" "!Name!%%~xA"  
REM Das echo für Tatsächlichen Gebrauch löschen
)
pause
goto :eof

:CleanName
set "Name=%~1"  
for /l %%B in (1,1,%Last%) do (
set "Str=ÿ!Str%%B!  
set "Ers=!Ers%%B!"  
set "Name=!Name:%Str%=%Ers%!"  
goto :eof

Mathe172
Mitglied: rannseier2
rannseier2 14.01.2011 um 01:18:59 Uhr
Goto Top
Hallo,

Das funktioniert schon mal soweit, hier für schon mal einen besten Dank.

Frage:

Wie kann man das Script auch auf Verzeichnisse erweitern?


Gruß,
Karl
Mitglied: rannseier2
rannseier2 14.01.2011 um 02:30:30 Uhr
Goto Top
Hallo Mathe,

Das Script sieht Vielversprechend aus, funktioniert leider nicht.

Liegt das an den "ÿ"?


Gruß,
Karl
Mitglied: mathe172
mathe172 14.01.2011 um 20:03:46 Uhr
Goto Top
Hallo rannseier02!

Sorry - Ich hatte noch zwei Denkfehler
Das hier funktioniert aber zumindest bei mir:
@echo off & setlocal enabledelayedexpansion
set "Drive=E:\"  
REM Alle Suchen-Ersetzen-Paare. 
REM Bsp: Suche:"  " Ersetze mit:" "   
REM Soll ein String nur am Namensanfang gesucht werden, vor beide Strings des Paares ein \ machen. 
REM Achtung: Zeichen wie = escapen: ^=
set "Str1=."  
set "Ers1= "  
set "Str2=  "  
set "Ers2= "  

for /F "tokens=1 delims=Str=" %%A in ('set Str') do if !last! lss %%A set "Last=%%A"  
for /R "%Drive%" %%A in ("*.*") do (  
call :CleanName "\%%~nA"  
echo.ren "%%A" "!Name:~1!%%~xA"  
REM Das echo für Tatsächlichen Gebrauch löschen
)
pause
goto :eof

:CleanName
set "Name=%~1"  
for /l %%B in (1,1,%Last%) do (
set "Str=!Str%%B!  
set "Ers=!Ers%%B!"  
call :Ersetzen
)
goto :eof

:Ersetzen
set "Name=!Name:%Str%=%Ers%!"  
goto:eof

Mathe172
P.S.: Das ÿ war ein nicht wirklich durchdachter Versuch, die ersetzung auf den Anfang der Namen zu Begrenzen- Was beim ersetzen von "." zu " " nicht viel Sinn gemacht hätte...
Mitglied: rannseier2
rannseier2 14.01.2011 um 21:56:43 Uhr
Goto Top
Hallo Mathe,

Das sieht gut aus und funktioniert auch bei mir.

Gibt es eine Möglichkeit dass auch für die Verzeichnisnamen zu erweitern?


Gruß,
Karl
Mitglied: pieh-ejdsch
pieh-ejdsch 14.01.2011 um 22:05:44 Uhr
Goto Top
moin,

ich verweise mal auf ein Script welches Ordnungsgemäß umbenennt: Ersetzen von Zeichen in Datei- und Verzeichnisnamen in allen Unterordnern
und zwar auch die betreffenden Ordnernamen vorzugsweise auch rekursiv.

zwar nur SonderZeichen etc. zum einzelnen Ersetzen aber ich guck mal ob ich noch was einfügen / ergänzen kann

@mathe = ~ * Istgleich , Tilde und Stern kannst Du nicht mit Erweiterter Variablendarstellung ersetzten.

Gruß Phil