58945
Goto Top

Dateien in Unterordnern automatisch umbenennen

Hallo zusammen,

da ich wenig Ahnung von Batchdateien habe, jedoch zwangsweise eine benötige stelle ich nun hier diese Frage:

Ich habe eine Liste nach folgendem Schema erstellt (aus einer Liste aus einem bestimmten Programm)

  • ren alterdateiname.* neuerdateiname.*
  • ren alterdateiname2.* neuerdateiname2.*
  • ... und so weiter und so fort.

Die Dateien befinden sich jedoch in ca 100 Unterordnern (durchnummeriert von 1 - X). Wie lässt sich dieses Problem lösen?
  • * als Platzhalter für den Ordner habe ich versucht, das ging aber leider nicht,
  • ebenso die Batchdatei in jedem Ordner ausführen zu lassen geht nicht, da zu aufwändig,
  • auch in einer Schleife alle Dateien in jedem Unterordner versuchen umzubenennen ist nicht gut, da es ca 150.000 Dateien sind.

Gibt es hierfür eine kleine schnelle Lösung per Batchdatei oder ist dies nicht möglich?

Ich hoffe jemand von euch kann mir helfen und ich bedanke mich schon einmal für jeden helfenden Beitrag im voraus.

mit freundlichen Grüßen
Michael

Content-Key: 76175

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

Ausgedruckt am: 28.03.2024 um 11:03 Uhr

Mitglied: Biber
Biber 17.12.2007 um 16:16:40 Uhr
Goto Top
Moin michaelv,

willkommen im Forum.

kannst Du zwei Details noch einmal etwas plastischer (z.B. mit Beispielen) darstellen:
  • die Unterordner befinden sich alle unter einem gemeinsamen Startverzeichnis (z.B. "D:\Adults\MeineUrlaubsbekanntschaften")
  • die Umbenennerei folgt einem für alle Dateien gleichen Muster oder hast Du eine Liste, in der für jede Datei "alterName", "neuerName" drinsteht? Oder sollen nur bestimmte Dateien (alle *.jpg oer so) umbenannt werden?

Grüße
Biber
Mitglied: 58945
58945 17.12.2007 um 16:22:40 Uhr
Goto Top
  • also so ganz genau weiß ich den Pfad nicht, nur die Dateien sind halt relativ zur Batchdatei in Unterordnern gespeichert, das weiß ich mit Sicherheit, für den Rest bin ich mich noch am erkundigen
bisher sieht es so aus:
Batchdatei auf Festplatte D: -> Dateien in den Ordnern D:/Test1, D:/Test2, ...

  • ich habe eine Dateiliste wo der aktuelle Dateiname und der neue Dateiname drin steht
Beispiel: Liste.txt mit Inhalt ren R95045.* R3107_02_2007_146.* wobei es sowohl jpeg, als auch TIF Files sind, aber jeder Dateiname ist einzigartig
Mitglied: Biber
Biber 17.12.2007 um 17:20:53 Uhr
Goto Top
Moin michaelv,

dann sollte es eigentlich kein Problem mehr sein nach der ganzen Vorarbeit eine CMD-Promptzeile dafür abzufeuern.

Ich mach mal kurz ein Strategiebeispiel.
Meine Spielsituation: ich habe mal drei Txt-Dateien hier auf h:\docs...
>dir h:\docs\*.txt /b /s
h:\docs\IBMRationalXDE.tip.txt
h:\docs\Java.tip.txt
h:\docs\Putty und WINSCP.txt
Dazu habe ich auch eine Umbenenn-Steuerdatei nach dem Muster "AlterName.ext;Neuername.ext"

Die heißt Renameliste.txt, liegt auf %temp% und sieht so aus:
Java.tip.txt;2007_java_tipp.txt
Putty und WINSCP.txt;2007_PuTTY und WinScP.txt 
... hat also nicht für alle Dateien, denen ich begegnen werde, einen Alt/Neu-Eintrag.

von CMD-Prompt feuere ich [nur zur Demo, brauchst Du nicht!) ab:
>for /r "H:\docs" %i in (*.txt) do @findstr /i "^%~ni" %temp%\RenameListe.txt  
##und erhalte die "gefundenen", für die ich "Umbenenn-Regeln" habe. 
Java.tip.txt;2007_java_tipp.txt
Putty und WINSCP.txt;2007_PuTTY und WinScP.txt

Will ich es gleich umbenennen, brauch ich nur noch ein paar Zeichen verändern:
>for /r "H:\docs" %i in (*.txt) do @for /f "tokens=1-2 delims=;" %j in ('@findstr /i "^%~ni" %temp%\RenameListe.txt') do @echo rename "%i" "%k"  
rename "H:\docs\Java.tip.txt" "2007_java_tipp.txt"  
rename "H:\docs\Putty und WINSCP.txt" "2007_PuTTY und WinScP.txt  "  

Also brauchst Du nur diese Zeile per Copy&Paste kopieren, mein "H:\Docs" in dein "Rootverzeichnis" zu ändern,
den Speicherort und den Inhalt der RenameListe anzupassen, fertig.
Und, falls Du es in einem Batch packen willst, dann noch alle Laufvariablen-Prozentzeichen verdoppeln (%%i statt %i etc.).

Dann können wir beide heute noch zeitig essen.

Grüße
Biber
Mitglied: pacobay
pacobay 17.12.2007 um 22:46:04 Uhr
Goto Top
Hallo Biber
also ich brauche immer etwas länger, wenn ich versuche Deine DOS-Werke zu verstehen.
Die sind klasse und für mich immer wieder eine intellektuelle Herausforderung.

Aber unter dem Gesichtspunkt "sowohl jpeg, als auch TIF Files", müsste doch im Bereich "for /r "H:\docs" %i in (*.txt) " zusätzlich auch noch „*.txt“ angepasst werden. Oder?

ciao pacobay
Mitglied: Biber
Biber 18.12.2007 um 08:58:23 Uhr
Goto Top
Moin pacobay,

danke für die Blumen.
Du hast natürlich volkommen recht mit der Suchmaske.

Die müsste dann (wenn wir tatsächlich alles wissen) angepasst werden auf
for /r "%StartDir%" %i in (*.tif *.jpeg *.jpg) do @whatever....  

Dass die "FOR /R"-Anweisung auch eine Wildcard-Liste verarbeiten kann, ist nicht ganz so ausdrücklich dokumentiert, funktioniert aber bestens.

Grüße
Biber
Mitglied: Biber
Biber 19.12.2007 um 09:54:31 Uhr
Goto Top
Moin michaelv,

Gibt es hierfür eine kleine schnelle Lösung per Batchdatei oder ist dies nicht möglich?
Gibt es von Dir ein kleines schnelles Feedback oder ist dies nicht möglich?
Ich hoffe jemand von euch kann mir helfen und ich bedanke mich schon einmal für jeden helfenden Beitrag im voraus.
Es bestätigt sich immer wieder, dass sich dieser Dank im voraus oft übersetzen lässt mit "ihr werdet nie wieder von mir hören".

Gib doch bitte Rückmeldung - unabhängig davon, ob es funktioniert oder nicht.

Danke
Biber
Mitglied: 58945
58945 19.12.2007 um 15:53:24 Uhr
Goto Top
Entschuldige das verspätete melden, war gestern dann doch noch mit anderen Dingen beschäftigt.

Deine Lösung musste ich dann doch nicht testen/einsetzen, da mir da noch was eingefallen war, was sich bestätigt hat. Ich versuche es kurz zu erklären.

Bspzeile aus meiner Rohliste:
3107 | 2 | 2006 | 141 | 3107\2\R90040

alte Datei hat den Namen: R90040.* (TIF oder jpeg halt, aber unerheblich)
neuer Name soll lauten: R3107_2_2006_141.*
hatte dabei allerdings übersehen, dass 3107\2\ schon den Ordner enthält, indem sich die Datei aktuell befindet. Somit musste ich die Liste einfach nur in eine Tabelle umwandeln (so hab ich es zumindest gemacht) die Ordnung herstellen und aus den ersten 4 Zeilen den neuen Dateinamen zusammensetzen und anschließend überall ein "ren " vorsetzen.
Insofern war das nachfragen hier evtl. ein bisschen vorschnell.

Trotzdem möchte ich mir hier nochmal für das schnelle Feedback und die Hilfe bedanken. Es ist erstaunlich zu sehen, wie komplexe Sachen man mit "simplen" Batchdateien lösen kann.

mfg
Michael
Mitglied: Biber
Biber 19.12.2007 um 16:12:08 Uhr
Goto Top
Danke, michaelv,

für die prompte Reaktion.
Dann werde ich den Beitrag schließen - und gelöst ist ja auch.

Bis zum nächsten Thread
Biber