Aufgrund einer Frage im Forum und einer kurzen Diskussion über Umständlichkeit, habe ich mich dazu berufen gefühlt, die möglichst bequemste Lösung mit den simpelsten Mitteln zu schaffen.
Die Frage aus dem Forum:
"Ich hab da eine frage kann einer von euch mir vll dabei helfen, wie ich von einem Ordner alle darin enthalten Dateien in einer Datenbank automatisch eintragen lassen kann? Dies mein ich speziel bei MP3 und WMA Dateien. Falls jemand was davon hat oder mir vll auf die sprünge helfen kann dann wäre ich super dankbar. Die Datenbank sollte am Besten MySQL sein."
Und hier meine Lösung:
Ich habe eine Batchdatei programmiert, die mehrere Dateien erstellt und mit deren Hilfe die gesamte Aufgabenstellung übernimmt. Hier eine kurze Beschreibung der Aufgaben, die die erstellten Dateien übernehmen (Namen in dieser Liste identisch mit den Variablennamen für diese Dateien im "Quellcode"):
DIRLIST: Diese Datei enthält einfach nur eine Liste aller Unterverzeichnisse des MP3-Ordners
SQLFILE: Diese Datei ist das SQL-Skript, das die Tabelle erstellt und die Daten einfügt
SQLBATCH: Diese Datei ruft mysql.exe mit den benötigten Parametern (u.a. dem SQL-Skript) auf
HELPERBATCH: Diese Datei sucht die Dateien aus einem Verzeichnis heraus und erstellt mit jeder einzelnen ein INSERT-Statement im SQL-Skript
Die Hauptdatei, deren "Quelltext" hier gelistet ist, erstellt diese Dateien immer automatisch und löscht sie am Schluss wieder aus dem Temp-Verzeichnis.
Das Problem mit Batch-Dateien unter Windows ist, dass man keine komplexen Programmstrukturen aufbauen kann. Diese Hürde wurde in diesem Fall durch das Erstellen der temporären Hilfsdateien umgangen. Beim Erstellen der Hilfsdateien ist vor allem eines schwierig: die benötigten Operatoren (z.B. % oder >) per ECHO-Befehl da rein zu bekommen. Für komplexe Batch-Dateien sind vor allem die drei Befehle FOR, IF und GOTO am wichtigsten. Wie FOR funktioniert, wird hier an zwei Stellen unterschiedlich demonstriert. Für IF und GOT gab es keine grösseren Verwendungsmöglichkeiten, aber die sind auch relativ einfach zu begreifen und man sieht hier die möglichen Ansätze für komplexere Strukturen mit den beiden Befehlen.
Bevor ich auf das Skript näher eingehe, hier noch einige Systemvoraussetzungen:
- Win2K oder WinXP (WinNT sollte meiner Meinung nach auch gehen)
- Aktivierte Befehlserweiterungen für cmd.exe (standardmässig aktiviert)
- Das Programm mysql.exe (im bin-Verzeichnis jeder MySQL-Installation zu finden)
Falls jemand kein MySQL installiert hat auf seinem Rechner und auch keine Lust hat, es zu tun, so kann er sich unter folgendem Link das Programm runterladen: http://0-checka.de/mysql-for-lima.zip (da müsste auch das Backup-Programm mysqldump mit bei sein, wenn ich mich richtig erinnere).
Noch einige Anmerkungen zu den Variablen, die angelegt werden:
Die unter DB-Infos sollten klar sein, es geht um die Verbindungsdaten zur MySQL-DB. Müssen natürlich angepasst werden.
Unter Tabelleninfos kann man sich einen Tabellennamen und eine Spalte aussuchen. Achtung: Die Tabelle wird bei jeder Ausführung des Skripts komplett gelöscht und neu angelegt, daher sollte man keine bestehende verwenden, ausser man weiss, was man tut.
Unter Sonstiges wird es interessant. MP3DIR und MP3FOLDER ergeben zusammen den vollständigen Pfad zum Hauptverzeichnis, wo die MP3-Dateien liegen. Die beiden Variablen müssen in genau der Form erstellt werden, also MP3DIR als Partitionsbuchstabe mit abschliessendem Doppelpunkt und MP3FOLDER als voller Pfad nach dem Doppelpunkt ohne abschliessenden Backslash. Die vier folgenden Variablen (DIRLIST, SQLFILE, SQLBATCH und HELPERBATCH) braucht man nicht abzuändern, es sei denn, es gibt irgendwelche Komplikationen mit anderen gleichlautenden Namen. Sollte man sie abändern, braucht man keine Dateiendungen anzufügen, da sie im Skript "hartkodiert" sind. Man sollte bei maximal 8 Buchstaben bleiben und keine Leerzeichen benutzen. Die Variable MYSQLBINPATH wird nur gebraucht, wenn entweder bei der MySQL-Installation das bin-Verzeichnis nicht in PATH eingetragen wurde (wird es aber eigentlich immer) oder wenn ihr das von mir bereitgestellte Programm benutzt. MYSQLBINPATH muss den vollständigen Pfad zu dem Ordner enthalten, der die Datei mysql.exe beinhaltet. Der Pfad muss mit einem Backslash abschliessen.
Mit den ganzen Infos und den Kommentaren im Skript sollte das Ganze eigentlich relativ leicht verständlich sein.
----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------
LEIDER WERDEN EINIGE ZEILEN UMGEBROCHEN, WAS IN EINER BATCHDATEI NATÜRLICH NICHT OK IST. ABER ANDERS KRIEGE ICH ES HIER IM SYSTEM NICHT HIN (CODE-TAG GEHT NICHT, WEGEN DER BACKSLASHS AN "VERBOTENEN" STELLEN. AM BESTEN DEN CODE KOMPLETT MARKIEREN UND IN EINEN EDITIOR KOPIEREN. DANN VERSCHWINDEN DIE ZEILENUMBRÜCHE.
Sind nur 3 Stellen, wo die Zeilen umgebrochen sind:
2. Zeile nach dem Kommentar "SQL-Skript vorbereiten", beginnt mit "echo CREATE TABLE"
3. Zeile nach dem Kommentar "Temporaeres Befehlsskript erstellen", beginnt mit "echo for /r"
2. Zeile nach dem Kommentar "Batch-Datei zum Ausfuehren des SQL-Skripts erstellen", beginnt mit "echo %MYSQLBINPATH%"
----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------
Viel Spass beim Erweitern des Skripts (z.B. die Tabelle in der DB besser gestaltetn und noch mehr Infos automatisch eintragen). Bitte den Banner nicht entfernen, sondern jedesmal beim Benutzen des Skriptes ehrfürchtig betrachten. Danke.