Zeile aus Datei auslesen und diese dann umbenennen
Hallo!
Ich habe folgendes Problem:
Ich habe einen Ordner voll mit Dateien. Diese Dateien haben alle ganz wilde Dateinamen (Das Programm mit dem diese Dateien erzeugt worden sind lief wurde für ein Unix-System geschrieben...)
In diesen Dateien steht eine Info, wie die Datei heisst. So konnte das Programm immer selbst nachschauen und so eine bessere Ordnung halten)
Diese Datei sieht etwa so aus:
...
2
TC72:18763
PLAST:18768
LAST:18768
#~3
HIER STEHT DER DATEINAME
TC72:18763
PLAST:18768
LAST:18768
...
Ich möchte nun die Zeile nach dem #~3 auslesen und dann die entsprechende Datei dahin umbenennen. Das ganze soll in einem Batch ablaufen, da es sich hier um mehrere Hundert Dateien handelt.
Wie kann ich so etwas am besten realisieren? Ich denke ich müsste irgendwie mit findstr arbeiten, aber mir fehlt da der richtige Ansatz.
Vielen Dank für die Hilfe!
Gruß
S-Mixie
Ich habe folgendes Problem:
Ich habe einen Ordner voll mit Dateien. Diese Dateien haben alle ganz wilde Dateinamen (Das Programm mit dem diese Dateien erzeugt worden sind lief wurde für ein Unix-System geschrieben...)
In diesen Dateien steht eine Info, wie die Datei heisst. So konnte das Programm immer selbst nachschauen und so eine bessere Ordnung halten)
Diese Datei sieht etwa so aus:
...
2
TC72:18763
PLAST:18768
LAST:18768
#~3
HIER STEHT DER DATEINAME
TC72:18763
PLAST:18768
LAST:18768
...
Ich möchte nun die Zeile nach dem #~3 auslesen und dann die entsprechende Datei dahin umbenennen. Das ganze soll in einem Batch ablaufen, da es sich hier um mehrere Hundert Dateien handelt.
Wie kann ich so etwas am besten realisieren? Ich denke ich müsste irgendwie mit findstr arbeiten, aber mir fehlt da der richtige Ansatz.
Vielen Dank für die Hilfe!
Gruß
S-Mixie
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 75267
Url: https://administrator.de/forum/zeile-aus-datei-auslesen-und-diese-dann-umbenennen-75267.html
Ausgedruckt am: 08.01.2025 um 07:01 Uhr
7 Kommentare
Neuester Kommentar
Moin S-Mixie,
willkommen im Forum.
Schade, Du hast Dir solche Mühe gegeben mit der Aufgabenbeschreibung, aber genau das Entscheidende hab ich nicht verstanden..
Nicht verstanden: in der Zeile nach "'#~3" der (Text-)Datei psghpsrghaan.xyz steht "psghpsrghaan.xyz"?
Und wenn ja, was heißt dann "dahin umbenennen"?
Oder heißen die Dateien jetzt "xy[lfdnr]" und der SOLL-Name steht jeweils drin?
Grüße
Biber
willkommen im Forum.
Schade, Du hast Dir solche Mühe gegeben mit der Aufgabenbeschreibung, aber genau das Entscheidende hab ich nicht verstanden..
Ich möchte nun die Zeile nach dem #~3 auslesen und dann die entsprechende Datei dahin umbenennen.
Nicht verstanden: in der Zeile nach "'#~3" der (Text-)Datei psghpsrghaan.xyz steht "psghpsrghaan.xyz"?
Und wenn ja, was heißt dann "dahin umbenennen"?
Oder heißen die Dateien jetzt "xy[lfdnr]" und der SOLL-Name steht jeweils drin?
Grüße
Biber
Hallo S-Mixie und auch von mir ein Willkommen!
Unter der Annahme, dass in der entsprechenden Zeile der SOLL-Name steht, könnte das für eine einzelne Datei so gehen:
Wenn Du den Batch zB als "C:\Batches\RenameByCertainLine.cmd" gespeichert hast, kansst Du diesen mit Übergabe der Datei so aufrufen:
Das Umbenennen wird (wegen des "@echo"vor dem "ren") vorerst (durch die Ausgabe des entsprechenden Befehles) nur simuliert.
Dazu wird die erste Zeile, welche nur "#~3" enthält, gesucht und der Name aus der darauf folgenden Zeile entnommen. Falls dort nicht nur der neue Dateiname, sondern auch der Typ steht, wäre der "ren"-Befehl so zu schreiben:
Sollte das Ergebnis in Deinem Sinne sein, kannst Du auch alle Dateien eines Ordners auf einmal erledigen:
Auch hier wird (solange "@echo" vor dem "ren" steht) nur angezeigt, aber noch nicht wirklich umbenannt.
Grüße
bastla
Unter der Annahme, dass in der entsprechenden Zeile der SOLL-Name steht, könnte das für eine einzelne Datei so gehen:
@echo off & setlocal
set ZNr=
for /f "delims=:" %%i in ('findstr /n /x "#~3" %1') do if not defined ZNr set /a ZNr=%%i+1
for /f "tokens=2 delims=:" %%i in ('findstr /n . %1^|findstr /b "%ZNr%:"') do @echo ren %1 "%%i%~x1"
C:\Batches\RenameByCertainLine.cmd "D:\Viele Dateien mit wilden Namen\Die erste davon.typ"
Dazu wird die erste Zeile, welche nur "#~3" enthält, gesucht und der Name aus der darauf folgenden Zeile entnommen. Falls dort nicht nur der neue Dateiname, sondern auch der Typ steht, wäre der "ren"-Befehl so zu schreiben:
ren %1 "%%i"
Sollte das Ergebnis in Deinem Sinne sein, kannst Du auch alle Dateien eines Ordners auf einmal erledigen:
@echo off & setlocal
set "Quelle=D:\Viele Dateien mit wilden Namen\*.*"
for %%d in ("%Quelle%") do call :ProcessFile "%%d"
goto :eof
:ProcessFile
set ZNr=
for /f "delims=:" %%i in ('findstr /n /b "#~3" %1') do if not defined ZNr set /a ZNr=%%i+1
for /f "tokens=2 delims=:" %%i in ('findstr /n . %1^|findstr /b "%ZNr%:"') do @echo ren %1 "%%i%~x1"
Grüße
bastla