Batchdatei - Tabellen erstellen aus beliebig vielen Textdateien
Hallo, ich habe eine große Filmsammlung (aktuell 255, es werden ständig mehr). Um den Überblick zu behalten würde ich gerne eine Tabelle (zB Excel) erstellen in der die Filmtitel und das Genre enthalten sind, als spalten der Tabelle. Da es immer mehr werden, möchte ich die Tabelle jederzeit mit allen Filmen neu erstellen.
Die Filme liegen folgendermaßen vor: Ordner "Filme" darin sind Unterordner, jeweils ein Unterordner pro Film. Der Unterordner heißt wie der Film. Im Unterordner liegt jeweils eine Datei Filmname.divx sowie eine EPG.txt. Die EPG.txt enthält in der ersten Zeile den Filmnamen, in der zweiten das Genre, in den anderen Zeilen eine Beschreibung. Die erste und zweite Zeile sollen ausgelesen und als exel gespeichert werden.
Bisher bin ich soweit, das ich alle Filmtitel speichere mit:
Dir /A /B /N /W /TC > ~DateiListe.xls
im Verzeichnis \Filme in der Window- Shell
Allerdings greife ich nur auf die Ordnernamen zu, nicht auf die txt Dateien darin
Folgende Probleme hab ich:
- ich muss in alle Unterordner
- Ich muss auf Zeileninhalte der txt zugreifen
- ich muss beim speichern als Tabelle angeben was in welche Zeile/Spalte kommt
Die Filme liegen folgendermaßen vor: Ordner "Filme" darin sind Unterordner, jeweils ein Unterordner pro Film. Der Unterordner heißt wie der Film. Im Unterordner liegt jeweils eine Datei Filmname.divx sowie eine EPG.txt. Die EPG.txt enthält in der ersten Zeile den Filmnamen, in der zweiten das Genre, in den anderen Zeilen eine Beschreibung. Die erste und zweite Zeile sollen ausgelesen und als exel gespeichert werden.
Bisher bin ich soweit, das ich alle Filmtitel speichere mit:
Dir /A /B /N /W /TC > ~DateiListe.xls
im Verzeichnis \Filme in der Window- Shell
Allerdings greife ich nur auf die Ordnernamen zu, nicht auf die txt Dateien darin
Folgende Probleme hab ich:
- ich muss in alle Unterordner
- Ich muss auf Zeileninhalte der txt zugreifen
- ich muss beim speichern als Tabelle angeben was in welche Zeile/Spalte kommt
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 108753
Url: https://administrator.de/forum/batchdatei-tabellen-erstellen-aus-beliebig-vielen-textdateien-108753.html
Ausgedruckt am: 27.04.2025 um 04:04 Uhr
7 Kommentare
Neuester Kommentar

Servus,
schau dir mal was fix und fertiges an, wie z.B die Variante.
Macht deutlich mehr Spass einen Barcodeleser an die Hülle dran zu halten und das war dann schon fast alles, was man[n] machen muß
Gruß
schau dir mal was fix und fertiges an, wie z.B die Variante.
Macht deutlich mehr Spass einen Barcodeleser an die Hülle dran zu halten und das war dann schon fast alles, was man[n] machen muß
Gruß
Hallo weiti89 und willkommen im Forum!
Du könntest es mit folgendem Batch versuchen:
Erstellt wird keine "echte" Excel-Datei, sondern eine CSV, welche aber direkt mit Excel geöffnet werden kann (und durch Zeile 7 des Batches auch wird). Durch ein einfaches "Speichern unter..." mit Auswahl des gewünschten Typs ".xls" erhältst Du dann auch das gewünschte Excel-File.
Grüße
bastla
P.S.: Ein "DIR /A /B", oder besser "DIR /AD /B", sollte auch genügen; "/N" "/W" und "/TC" ändern hier nichts am Ergebnis ...
Du könntest es mit folgendem Batch versuchen:
@echo off & setlocal
set "Basis=D:\Filme"
set "Liste=%Basis%\Liste.csv"
>"%Liste%" echo "Filmname";"Genre"
for /d %%i in ("%Basis%\*.*") do call :ProcessDir "%%i"
"%Liste%"
goto :eof
:ProcessDir
set "EPG=%~1\EPG.txt"
set /p Filmname=<"%EPG%"
set Genre=
for /f "usebackq skip=1 delims=" %%a in ("%EPG%") do if not defined Genre set "Genre=%%a"
>>"%Liste%" echo "%Filmname%";"%Genre%"
goto :eof
Grüße
bastla
P.S.: Ein "DIR /A /B", oder besser "DIR /AD /B", sollte auch genügen; "/N" "/W" und "/TC" ändern hier nichts am Ergebnis ...
Hallo weiti89!
Wenn ich Dein "Borat"-Beispiel in eine "EPG.txt" schreibe, wird bei mir nur eine Zeile daraus ...
Könnte es sein, dass es im Original keine Windows-Zeilenumbrüche (CR/LF) sind?
Vielleicht ließe sich der zweite Eintrag (wenn Genre leer bleibt) so vermeiden: Ersetze Zeile 15 durch:
Probleme könnte es übrigens auch geben, wenn ein Filmtitel (im Genre wird's wohl eher nicht der Fall sein) ein "&" (oder "<", ">" bzw "|") enthält. Um dem vorzubeugen, solltest Du noch vor Zeile 15 einfügen:
- analog auch für die anderen genannten Sonderzeichen ...
Grüße
bastla
Wenn ich Dein "Borat"-Beispiel in eine "EPG.txt" schreibe, wird bei mir nur eine Zeile daraus ...
Könnte es sein, dass es im Original keine Windows-Zeilenumbrüche (CR/LF) sind?
Vielleicht ließe sich der zweite Eintrag (wenn Genre leer bleibt) so vermeiden: Ersetze Zeile 15 durch:
if defined Genre >>"%Liste%" echo "%Filmname%";"%Genre%"
was macht set "Genre=%%a" ?
Mit "Genre=%%a" wird die ausgelesene zweite Zeile der EPG.txt der Variablen %Genre% zugewiesen.Probleme könnte es übrigens auch geben, wenn ein Filmtitel (im Genre wird's wohl eher nicht der Fall sein) ein "&" (oder "<", ">" bzw "|") enthält. Um dem vorzubeugen, solltest Du noch vor Zeile 15 einfügen:
set "Filmname=%Filmname:&=^&"
Grüße
bastla
Hallo weiti89!
Vorweg ein Hinweis grundsätzlicher Art: Mit "for /?" (und analog für andere CMD-Befehle) kannst Du die Online-Hilfe aufrufen (speziell zu "for" ist diese ziemlich umfangreich) ...
Die ganze Zeile
hat folgende Aufgabe:
"Lese die in der Variablen "%EPG%" (damit diese, für den Fall dass der Ordnername Leerzeichen enthalten sollte, unter Anführungszeichen gesetzt werden kann, wird "usebackq" benötigt) angegebene Datei zeilenweise aus, ohne die jeweilige Zeile zu zerlegen (es wird festgelegt, dass es kein Trennzeichen = "delimiter" geben soll), überspringe die Zeile 1 und schreibe das Ergebnis (jeweils die komplette Zeile) in die Variable %%a bzw in weiterer Folge in %Genre%".
Da bei jedem Durchlauf (also für alle Zeilen ab der zweiten Zeile) auf diese Art und Weise jeweils nicht nur %%a, sondern auch %Genre% einen neuen Wert erhielte, wird zunächst die Variable %Genre% gelöscht und dann sicher gestellt, dass ihr nur ein Wert zugewiesen wird, wenn sie noch keinen hat - was nur auf den ersten Schleifendurchlauf (und daher für Zeile 2) zutrifft.
Grüße
bastla
Vorweg ein Hinweis grundsätzlicher Art: Mit "for /?" (und analog für andere CMD-Befehle) kannst Du die Online-Hilfe aufrufen (speziell zu "for" ist diese ziemlich umfangreich) ...
Die ganze Zeile
for /f "usebackq skip=1 delims=" %%a in ("%EPG%") do if not defined Genre set "Genre=%%a"
"Lese die in der Variablen "%EPG%" (damit diese, für den Fall dass der Ordnername Leerzeichen enthalten sollte, unter Anführungszeichen gesetzt werden kann, wird "usebackq" benötigt) angegebene Datei zeilenweise aus, ohne die jeweilige Zeile zu zerlegen (es wird festgelegt, dass es kein Trennzeichen = "delimiter" geben soll), überspringe die Zeile 1 und schreibe das Ergebnis (jeweils die komplette Zeile) in die Variable %%a bzw in weiterer Folge in %Genre%".
Da bei jedem Durchlauf (also für alle Zeilen ab der zweiten Zeile) auf diese Art und Weise jeweils nicht nur %%a, sondern auch %Genre% einen neuen Wert erhielte, wird zunächst die Variable %Genre% gelöscht und dann sicher gestellt, dass ihr nur ein Wert zugewiesen wird, wenn sie noch keinen hat - was nur auf den ersten Schleifendurchlauf (und daher für Zeile 2) zutrifft.
Grüße
bastla