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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 158408
Url: https://administrator.de/forum/dateinamenbereinigung-per-batch-158408.html
Ausgedruckt am: 10.01.2025 um 12:01 Uhr
14 Kommentare
Neuester Kommentar
Hallo rannseier2!
Versuchs mal damit(Leerzeichen find ich zwar nicht so schön...):
Mathe172
Versuchs mal damit(Leerzeichen find ich zwar nicht so schön...):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@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
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
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
@mathe172
... und nur für den Fall, dass es noch weitere "-" im Namen gäbe (und diese und die Namensteile danach erhalten bleiben sollen):
Grüße
bastla
... 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"
bastla
Hallo rannseier2!
Versuchs mal damit:
Mathe172
Versuchs mal damit:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@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
Hallo rannseier02!
Sorry - Ich hatte noch zwei Denkfehler
Das hier funktioniert aber zumindest bei mir:
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...
Sorry - Ich hatte noch zwei Denkfehler
Das hier funktioniert aber zumindest bei mir:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@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...
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
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