Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batchdatei - Tabellen erstellen aus beliebig vielen Textdateien

Frage Entwicklung Batch & Shell

Mitglied: weiti89

weiti89 (Level 1) - Jetzt verbinden

11.02.2009, aktualisiert 21:21 Uhr, 7596 Aufrufe, 7 Kommentare

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
Mitglied: 60730
11.02.2009 um 21:40 Uhr
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ß
Bitte warten ..
Mitglied: weiti89
11.02.2009 um 22:09 Uhr
mhm, ne. Meine Filme sind Videoaufnahmen aus dem Fernsehen. Da gibt es keine Barcodes. und manuell alle Filme per Hand eintragen will ich ja vermeiden.
Bitte warten ..
Mitglied: bastla
11.02.2009 um 22:10 Uhr
Hallo weiti89 und willkommen im Forum!

Du könntest es mit folgendem Batch versuchen:
01.
@echo off & setlocal 
02.
set "Basis=D:\Filme" 
03.
set "Liste=%Basis%\Liste.csv" 
04.
 
05.
>"%Liste%" echo "Filmname";"Genre" 
06.
for /d %%i in ("%Basis%\*.*") do call :ProcessDir "%%i" 
07.
"%Liste%" 
08.
goto :eof 
09.
 
10.
:ProcessDir 
11.
set "EPG=%~1\EPG.txt" 
12.
set /p Filmname=<"%EPG%" 
13.
set Genre= 
14.
for /f "usebackq skip=1 delims=" %%a in ("%EPG%") do if not defined Genre set "Genre=%%a" 
15.
>>"%Liste%" echo "%Filmname%";"%Genre%" 
16.
goto :eof
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 ...
Bitte warten ..
Mitglied: weiti89
11.02.2009 um 22:30 Uhr
Danke erstmal!
ich habe "Basis=E:\Externe\Filme" in Zeile 2 angepasst. Es klappt ganz gut, nur stehen bei vielen (schätze 25%) Zwei Einträge, einmal mit Genre und einmal ist die Genre-Zeile leer.
Bsp.:

EPG.txt:

BORAT (BORAT: CULTURAL LEARNINGS OF AMERICA FOR MAKE BENEFIT GLORIOUS NATION OF KAZAKHSTAN) >>U
Komödie>>/U
Seine Schwester ist die[...]
USA 2006. 81 Min. Von Larry Charles, mit Sacha Baron Cohen, Kevin Davitian, Daniel Castro.

Die Zeilenumbrüche habe ich extra markiert mit >>U

Das meißte kann ich nachvollziehen, aber was macht set "Genre=%%a" ?

ps: spaßige fehler wenn die EPG.txt falsch formatiert ist
JOHNNY ENGLISH hat als Genre "Armes Großbritannien!"
Bitte warten ..
Mitglied: bastla
11.02.2009 um 22:41 Uhr
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:
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:&=^&"
- analog auch für die anderen genannten Sonderzeichen ...

Grüße
bastla
Bitte warten ..
Mitglied: weiti89
11.02.2009 um 22:58 Uhr
Die If abfrage klappt wunderbar. Danke!
Die Zeilenumbrüche werden von einem Aufnahme-Programm so erstellt, daher weiß ich nicht genau was für welche es sind. der Editor zeigt sie mir aber auch immer als Umbrüche an.

Was steht in %%a? was heißt delim?

Eigentliches Problem ist soweit geklärt. Vielen Dank.
Bitte warten ..
Mitglied: bastla
11.02.2009 um 23:11 Uhr
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
for /f "usebackq skip=1 delims=" %%a in ("%EPG%") do if not defined Genre set "Genre=%%a"
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Grafik
gelöst Grafiken Tabellen erstellen, Programm gesucht (6)

Frage von InvisibleQuantum zum Thema Grafik ...

Netzwerkgrundlagen
IPsec - .conf und .secret erstellen aus Gruppe und User (16)

Frage von MaxMLe zum Thema Netzwerkgrundlagen ...

RedHat, CentOS, Fedora
gelöst Erstellen von Desktopverknüpfungen und Anpassung der Taskleiste (2)

Frage von honeybee zum Thema RedHat, CentOS, Fedora ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...