richtig
Goto Top

per batch neue dateien in verzeichnis auslesen, dateinamen als variable in xml datei einfügen.

hallo zusammen,

um was geht es:
auf einer html seite befindet sich ein flash player inkl. playlist. die playlist liegt dort in einer xml datei vor. in der playlist sind alle dateinamen eines bestimmten verzeichnisses enthalten sowie der autor und titel des jeweiligen stückes.

bsp.:
im verzeichnis /media liegt die datei titel_autor.flv und die datei titel2_autor.flv

die playlist.xml datei ist folgendermaßen aufgebaut:

<?xml version="1.0" encoding="utf-8"?>
<playlist version="1" xmlns="http://xspf.org/ns/0/">
<trackList>

<track>
<title>titel</title>
<creator>autor</creator>
<location>media/titel_autor.flv</location>
</track>

<track>
<title>titel2</title>
<creator>autor</creator>
<location>media/titel2_autor.flv</location>
</track>

</trackList>
</playlist>

mein problem:
bisher musste jede einzelne datei zunächst in das verzeichnis /media geladen werden, anschließend die playlist bearbeitet und in das stammverzeichnis des flash players geladen werden.

mein ziel:
toll wäre, wenn man alles automatisieren könnte: ein batch-skript liest das verzeichnis aus, in dem die videos gespeichert werden und gibt die dateinamen als variable weiter (evtl. auch nur die NEUEN dateien). jeder dateiname wird nun in die xml datei eingefügt (zeile 4) und mit den entsprechenden tags versehen. teile des dateinamens sollten dann als titel und autor verwendet werden. eventuell könnte man dann alles noch per ftp uploaden.

meine bitte:
ich habe sehr begrenzte batch kenntnisse und möchte diese aufgabe nutzen, um tiefer einzusteigen. es wäre super, wenn mir jemand mal ein paar hilfestellungen geben könnte; welche befehle ich brauche, wo ich eventuell ein paar beispiele für die einzelnen befehle finden kann.

ich danke euch schonmal und wünsche einen guten start ins wochenende ;)
grussascha

Content-ID: 67561

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

Ausgedruckt am: 19.11.2024 um 17:11 Uhr

Biber
Biber 31.08.2007 um 12:50:16 Uhr
Goto Top
Moin grussascha,

könntest Du bitte den zweiten Teil des folgenden Zitats etwas konkretisieren bitte?

und gibt die dateinamen als variable weiter (evtl. auch nur die NEUEN dateien). jeder dateiname wird nun in die xml datei eingefügt (zeile 4) und mit den entsprechenden tags versehen. teile des dateinamens sollten dann als titel und autor verwendet werden

Am Besten mit Beispielen.

Danke
Biber
MRosoft
MRosoft 31.08.2007 um 13:02:46 Uhr
Goto Top
Die Dateien heißen z.B. 99luftballons_Nena.Flv

in der XML steht dann

<track>
<title>99luftballons</title>
<creator>Nena</creator>
<location>media/99luftballons.flv</location>
</track>


Bitte korigiert mich wenn ich das falsch wiedergegeben habe.
richtig
richtig 31.08.2007 um 13:50:41 Uhr
Goto Top
fast. wenn du beispielsweise eine datei hast mit dem namen nena_99luftballons.flv dann sollte folgender textblock in die xls eingefügt werden:

<track>
<title>99luftballons</title>
<creator>nena</creator>
<location>media/nena_99luftballons.flv</location>
</track>

ich könnte mir aber auch vorstellen, dass das gestartete skript eine eingabe für title und creator fordert, damit ich evtl. auch einer mediendatei mit dem namen mov0001.flv einen titel und autor zuweisen kann.

grussascha
richtig
richtig 03.09.2007 um 15:34:29 Uhr
Goto Top
hallo,

erste erfolgserlebnisse konnte ich am wochenende verbuchen. ich schaffe es zumindest schonmal einen textblock in der gewünschten formatierung auszugeben. das verzeichnis enthält beispielsweise drei flv-dateien. MVI_3101.flv, MVI_3102.flv und MVI_3103.flv

der code hierfür sieht so aus:
@echo off
dir *.flv /b >>mediadaten.txt
for /F "tokens=1 delims=_." %%i in (mediadaten.txt) do set title=%%i
for /F "tokens=2 delims=_." %%j in (mediadaten.txt) do set author=%%j
for /F %%k in (mediadaten.txt) do set filename=%%k
echo ^<track^> >>playlist.txt
echo ^<title^>%title%^<^/title^> >>playlist.txt
echo ^<creator^>%author%^<^/creator^> >>playlist.txt
echo ^<location^>media^/%filename%^<^/location^> >>playlist.txt
echo ^<^/track^>

das ergebnis in der playlist.txt:
<track>
<title>MVI</title>
<creator>3103</creator>
<location>media/MVI_3103.flv</location>
</track>

problem: ich bekomme immer nur die letzte datei der auflistung in mediadaten.txt als textblock angezeigt. leider nicht pro datei einen textblock (so sollte es aussehen):
<track>
<title>MVI</title>
<creator>3101</creator>
<location>media/MVI_3101.flv</location>
</track>
<track>
<title>MVI</title>
<creator>3102</creator>
<location>media/MVI_3102.flv</location>
</track>
<track>
<title>MVI</title>
<creator>3103</creator>
<location>media/MVI_3103.flv</location>
</track>

außerdem brauche ich jetzt noch eine funktion, die kopf und fußdaten der playlist datei in die playlist.txt einträgt. alles in allem sollte dann so aussehen:

--------- kopfzeilen ----------
<?xml version="1.0" encoding="utf-8"?>
<playlist version="1" xmlns="http://xspf.org/ns/0/">
<trackList>

---------- trackliste ----------
<track>
<title>MVI</title>
<creator>3101</creator>
<location>media/MVI_3101.flv</location>
</track>
<track>
<title>MVI</title>
<creator>3102</creator>
<location>media/MVI_3102.flv</location>
</track>
<track>
<title>MVI</title>
<creator>3103</creator>
<location>media/MVI_3103.flv</location>
</track>

---------- fußzeilen ----------
</trackList>
</playlist>

eine idee, wie ich da weitermachen kann?

grussascha
richtig
richtig 05.09.2007 um 10:34:33 Uhr
Goto Top
ok, etwas verkürzen kann ich die sache ja, indem ich das erstellen einer temporären txt einfach sein lasse und den DIR befehl in die for schleife einbinde: ('dir *.flv /b').

problem allerdings immernoch... und da komme ich einfach nicht weiter, obwohl ich jetzt schon seit 3 tagen tutorials und beiträge durchforste:

for /f "token=1,2 delims=." %%1 ('dir *.flv /b') do echo %%1

so, %%1 gibt mir nun untereinander alle werte für das entsprechende token an. hier also untereinander alle präfixe der dateien, die sich im verzeichnis befinden und mit .flv enden. bei datei1.flv, datei2.flv und datei3.flv im verzeichnis also:

datei1
datei2
datei3

setze ich %%1 nun als umgebungsvariable %dat1% dann bekomme ich als ausgabe immer nur den letzten der aufgelisteten werte, da die anderen ja immer durch den folgenden wert überschrieben wurden. in diesem fall ergibt das:

set dat1=%%1
echo %dat1%

--- ausgabe ---
datei3

wie kann ich diesen einzelnen ausgaben denn nun verschiedene umgebungsvariablen zuweisen? ich möchte nämlich im weiteren verlauf die drei präfixe wieder aufrufen. sprich:

datei1 soll zu %dat1%
datei2 soll zu %dat2% etc. werden

mal sehn, ob mir da jemand weiterhelfen kann face-smile
danke und grussascha
MRosoft
MRosoft 05.09.2007, aktualisiert am 18.10.2012 um 18:32:24 Uhr
Goto Top
Schau mal hier vielleicht kommst Du damit weiter ist ja sowas ähnliches


Ordnernamen mit mp3-Information und Inhalt (Titel) auslesen und in Textdatei schreiben
bastla
bastla 06.09.2007 um 20:37:41 Uhr
Goto Top
Hallo richtig!

Das, was Du mit den Dateinamen vorhast, solltest Du nicht auf später verschieben, sondern gleich erledigen, etwa (rein handwerklich) so:
@echo off & setlocal
cd /d "D:\media"  
set "PL=playlist.txt"  
set "Typ=flv"  

::Kopf
echo ^<?xml version="1.0" encoding="utf-8"?^>>"%PL%"  
echo ^<playlist version="1" xmlns="http://xspf.org/ns/0/"^>;>>"%PL%"  
echo ^<trackList^>>>"%PL%"  

::Rumpf
for %%i in (*.%Typ%) do (
	for /f "tokens=1* delims=_" %%a in ('echo %%~ni') do (  
		echo ^<track^>>>"%PL%"  
		echo ^<title^>%%a^<^/title^>>>"%PL%"  
		echo ^<creator^>%%b^<^/creator^>>>"%PL%"  
		echo ^<location^>media^/%%~nxi^<^/location^>>>"%PL%"  
		echo ^<^/track^>>>"%PL%"  
	)
)

::Fuß
echo ^</trackList^>>>"%PL%"  
echo ^</playlist^>>>"%PL%"  
Um die Lösung etwas flexibler zu gestalten, werden in der ersten Schleife alle passenden Dateien (*.%Typ%) gelesen und nur der Dateiname (%%~ni) in der zweiten Schleife als Eingabe verwendet. Damit wird erreicht, dass sowohl Titel als auch Autor auch einen oder mehrere Punkte aufweisen dürfen. Mit "tokens=1*" wird als zusätzlich nur das erste Auftreten von "_" als Trennung Titel/Autor interpretiert, sodass im (unwahrscheinlichen?) Fall mehrerer enthaltener "_" keine Namensbestandteile verloren gehen.

Aufgrund Deiner Vorlage noch fest "verdrahtet" ist der Pfad "media", weshalb am Anfang in das entsprechende Verzeichnis (bitte anpassen) gewechselt wird - hier wäre noch eine variable Lösung zu überlegen.

Grüße
bastla

[Edit] Da im Tag <location> ja eigentlich immer der "originale" Dateiname stehen muss, habe ich die entsprechende Zeile dahingehend abgeändert. [/Edit]
richtig
richtig 06.09.2007 um 22:34:10 Uhr
Goto Top
hallo bastla,

vielen dank!!! sieht ganz gut aus. ich werde es a. s. a. p. ausprobieren. so wie's aussieht schachtelsts du den for befehl mehrfach ineinander, und fängst die parameter, bevor sie überschrieben werden können, ab, um sie weiterzuverarbeiten; hab ich das richtig erkannt? also mal in meinem laien-batch-talk formuliert...

sieht echt super aus. muss das mal stück für stück durchgehen, ums auch zu kapieren. aber schonmal herzlichsten dank für die arbeit, die du dir gemacht hast. ich melde mich wieder, wenn ichs getestet habe.

danke und guten rutsch ins wochenende schonmal face-smile
grussascha
richtig
richtig 12.09.2007 um 09:14:57 Uhr
Goto Top
hallo bastla, hallo an alle anderen,

hat etwas gedauert... bin aber gestern mal endlich wieder dazu gekommen. und ich kann nur sagen: perfekt! ich hab die verzeichnisse angepasst und es hat schonmal sofort 1a funktioniert.

wie könnte man es erreichen, dass das verzeichnis auch gemischte dateitypen enthalten kann? das wäre der einzige punkt, über den es sich noch lohnen würde nachzudenken. es kann auch mal sein, dass ein mp3 oder jpg von dem player geladen werden soll.

ich habe etwas mit den delims und tokens rumprobiert, bekomme das aber nicht so recht hin, da ich dann, wie du schon oben erwähnt hast, die dateinamen nicht wirklich flexibel gestalten kann.

hast du da noch eine idee?

danke schonmal und gruß
sascha
bastla
bastla 12.09.2007 um 12:24:49 Uhr
Goto Top
Hallo richtig!

Das könnte dann so gehen:
@echo off & setlocal
cd /d "D:\media"  
set "PL=CSV-playlist.txt"  
set "Typ=flv jpg mp3"  

::Kopf
echo ^<?xml version="1.0" encoding="utf-8"?^>>"%PL%"  
echo ^<playlist version="1" xmlns="http://xspf.org/ns/0/"^>;>>"%PL%"  
echo ^<trackList^>>>"%PL%"  

::Rumpf
for %%t in (%Typ%) do (
	for %%i in (*.%%t) do (
		for /f "tokens=1* delims=_" %%a in ('echo %%~ni') do (  
			echo ^<track^>>>"%PL%"  
			echo ^<title^>%%a^<^/title^>>>"%PL%"  
			echo ^<creator^>%%b^<^/creator^>>>"%PL%"  
			echo ^<location^>media^/%%~nxi^<^/location^>>>"%PL%"  
			echo ^<^/track^>>>"%PL%"  
		)
	)
)

::Fuß
echo ^</trackList^>>>"%PL%"  
echo ^</playlist^>>>"%PL%"  
Die einzelnen in der "set"-Zeile angeführten Typen müssen durch Leerstellen getrennt sein.

Grüße
bastla
richtig
richtig 13.09.2007 um 14:22:14 Uhr
Goto Top
ah, super. so viel muss man da gar nicht ändern. wusst nicht, dass ich oben auch mehrere dateiendungen angeben kann.

also, danke für die super hilfe. ich werde noch einen anderen aufmachen, da ich nun an einem problem mit der synchronisierung von einem ftp verzeichnis und einem lokalen verzeichnis habe.

langsam komm ich dem batchen auch auf die schliche ;) kannst ja in den anderen thread mal reinschaun... ich zähl auf deine hilfe.

danke nochmal
grussascha