77522
Apr 10, 2009, updated at 16:52:50 (UTC)
5137
2
0
mit batch alle dateien in text1 text2...umbenennen
ich habe es schon gegoogelt doch nicht verstanden
ich will mit batch alle txt dateien in text1 text2...umbenennen
doch bei mir ändert es nur eine datei
mein befehl lautet:
for /l %%a in (1 1 20) do ren "*.txt" "text%%a"
doch das funktioniert nicht
kann mir jemand helfen
schonmal danke in vorraus
doch bei mir ändert es nur eine datei
mein befehl lautet:
for /l %%a in (1 1 20) do ren "*.txt" "text%%a"
doch das funktioniert nicht
kann mir jemand helfen
schonmal danke in vorraus
Please also mark the comments that contributed to the solution of the article
Content-Key: 113670
Url: https://administrator.de/contentid/113670
Printed on: April 26, 2024 at 19:04 o'clock
2 Comments
Latest comment
Hallo collmaster59 und willkommen im Forum!
Das sollte etwa so gehen:
Der Ansatz ist etwas allgemeiner formuliert (sodass er zB auch für andere Dateitypen verwendet werden könnte) und berücksichtig auch, dass ev eine gleichnamige Datei (zB "text003.txt") schon vorhanden sein könnte - es wird dann einfach die Nummer so lange hochgezählt, bis es keine Kollision mehr gibt.
Unter der Annahme, dass ev auch eine bestimmte Reihenfolge der Dateien sinnvoll wäre, werden die vorhandenen Textdateien nach Änderungsdatum (siehe "dir /?" und dort "/od") geordnet verarbeitet.
Außerdem ist es mE sinnvoll, für eine einheitliche Länge des Dateinamens zu sorgen und daher führende Nullen zu verwenden - im Beispiel sind (siehe "3" in Zeile 15) alle Nummern dreistellig. Dies wird erreicht, indem die letzten 3 Stellen der Variablen %Nr% verwendet werden (siehe dazu "set /?") - bei einem aktuellen Wert von "1000004" ergibt sich dann eben "004". Wenn übrigens nicht mehr als 3 Stellen benötigt werden, könnte der Startwert für die Variable anstelle von "1000000" auch einfach "1000" lauten ...
Es wird, wegen des "echo" vor dem "ren" in Zeile 17, zu Testzwecken zunächst nur der Umbenennungsbefehl angezeigt, der Name aber noch nicht geändert - wenn das Ergebnis vernünftig aussieht, einfach dieses "echo" (und auch die dann unnötige "pause") entfernen und den Batch auf die Textdateien loslassen ...
Grüße
bastla
Das sollte etwa so gehen:
@echo off & setlocal
set "Ordner=D:\Dein Ordner mit vielen Textdateien"
set "AltTyp=txt"
set "NeuName=text"
set "NeuTyp=txt"
set /a Nr=1000000
for /f "delims=" %%i in ('dir /b /od "%Ordner%\*.%AltTyp%"') do call :ProcessFile "%Ordner%\%%i"
pause
goto :eof
:ProcessFile
set /a Nr+=1
set "N=%NeuName%%Nr:~-3%.%NeuTyp%"
if exist "%Ordner%\%N%" goto :ProcessFile
echo ren %1 "%N%"
goto :eof
Unter der Annahme, dass ev auch eine bestimmte Reihenfolge der Dateien sinnvoll wäre, werden die vorhandenen Textdateien nach Änderungsdatum (siehe "dir /?" und dort "/od") geordnet verarbeitet.
Außerdem ist es mE sinnvoll, für eine einheitliche Länge des Dateinamens zu sorgen und daher führende Nullen zu verwenden - im Beispiel sind (siehe "3" in Zeile 15) alle Nummern dreistellig. Dies wird erreicht, indem die letzten 3 Stellen der Variablen %Nr% verwendet werden (siehe dazu "set /?") - bei einem aktuellen Wert von "1000004" ergibt sich dann eben "004". Wenn übrigens nicht mehr als 3 Stellen benötigt werden, könnte der Startwert für die Variable anstelle von "1000000" auch einfach "1000" lauten ...
Es wird, wegen des "echo" vor dem "ren" in Zeile 17, zu Testzwecken zunächst nur der Umbenennungsbefehl angezeigt, der Name aber noch nicht geändert - wenn das Ergebnis vernünftig aussieht, einfach dieses "echo" (und auch die dann unnötige "pause") entfernen und den Batch auf die Textdateien loslassen ...
Grüße
bastla