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

Ordnernamen mit mp3-Information und Inhalt (Titel) auslesen und in Textdatei schreiben

Frage Entwicklung Batch & Shell

Mitglied: evileye07

evileye07 (Level 1) - Jetzt verbinden

12.03.2007, aktualisiert 18.03.2007, 7667 Aufrufe, 21 Kommentare

Hallo,

ich bin grad ein wenig überfordert was meine Kenntnisse bezüglich batch-Programmierung
angehen. Ich komme trotz durchforsten dieses Forums nicht weiter, hier mein Vorhaben:

Ich will eine Textdatei (daten.js) erstellen, in welcher Daten von mp3-Alben enthalten sind,
welche später weiterverwendet werden sollen. Die Datei soll wie folgt aussehen:

[artist,album,jahr,ordner,songs]

Beispiel:

var daten = unescape('\

#Artist a,Album a,2005,1,song a|song b|song c|song d\

#Artist b,Album b,2005,1,song a|song b|song c|song d|song e\

');


Die Strukur der auszulesenen Ordner schaut z.b. so aus:

c:\music\1\Artist a - Album 1 - Jahr\[01] Artist - Songtitel.mp3
c:\music\1\Artist a - Album 1 - Jahr\[02] Artist - Songtitel.mp3
c:\music\2\Artist b - Album 2 - Jahr\[01] Artist - Songtitel.mp3
c:\music\2\Artist b - Album 2 - Jahr\[02] Artist - Songtitel.mp3

ect... sowie:

c:\music\index\include\daten.js


Im Namen des Album-Verzeichnis stehen somit alle Informationen bezüglich Artist, Album und Jahr.

Die folgenden "Zeilen" filtern alle Ordner mit mp3-Alben heraus,
der Verzeichnis-String wird in Artist,Album, Jahr und Ordner zerlegt sowie alle
Songs ausgelesen, bis danach das nächste Verzeichnis "abgearbeitet" wird.

@echo off
for /f "tokens=1-4 delims=\" %%a in ('dir ..\..\ /S /B /O /AD') do (
if not "%%d"=="" if not "%%c"=="index" (
for /f "tokens=1-4 delims=-" %%i in ('@echo %%d') do ( @echo %%i,%%j,%%c,%%k )
for /f "tokens=1-4 delims=-" %%x in ('dir "%%a\%%b\%%c\%%d\*.mp3" /B') do ( @echo %%y )
))
pause


Das Problem liegt darin, dass der Verzeichnisstring sowie die Songnamen noch Leerzeichen enthalten:

artist a , album , 1, 2005

Sobald ich ein Leerzeichen bei delims mit angebe, ist dies syntaktisch nicht mehr"verarbeitbar",
Das Trennzeichen sollte aber " - " (geht das überhaupt?) lauten.
Ausserdem schaffe ich es nicht die Songs ohne Zeilenumbruch (hinter Artist, Album, Jahr und Ordnernummer) einfach mit "ranzuhängen,
so dass der gesamte String exakt wie um obigen Beispiel (daten.js) aufgebaut ist."

Kann mir hier jemand freundlicher Weise weiterhelfen?
Vielen Dank,
evileye
Mitglied: Biber
12.03.2007 um 22:12 Uhr
Moin evileye07,

in der Theorie sollte es so funktionieren:
01.
@echo off & setlocal enableDelayedExpansion 
02.
for /f "tokens=1-4 delims=\" %%a in ('dir ..\..\ /S /B /O /AD') do ( 
03.
if not "%%d"=="" if not "%%c"=="index" ( 
04.
for /f "tokens=1-3 delims=- " %%i in ("%%d") do ( 
05.
    call :AddTitle 
06.
    call :Trim %%i,%%j,%%c,%%k  
07.
    for /f "tokens=2 delims=-" %%x in ('dir "%%a\%%b\%%c\%%d\*.mp3" /B') do call :AddTitle %%x 
08.
   REM [siehe unten!! ] set titles=!titles:@=^|! 
09.
   @echo %itrim%,%jTrim%,%cTrim%,%kTrim%,!titles:~0,-1!  
10.
))) 
11.
pause 
12.
goto :eof 
13.
 
14.
:Trim 
15.
Set iTrim=%1 
16.
set jTrim=%2 
17.
set cTrim=%3 
18.
set kTrim=%4 
19.
goto :eof 
20.
:AddTitle 
21.
If [%1]==[] Set "Titles=" & goto :eof 
22.
Set Titles=%Titles%%*@ 
23.
REM Diese Zeile enthält .....%Titles% + Param%1 + Zeichen @ ---alles zusammengequetscht 
24.
goto :eof 
25.
 
[ungetestete Skizze]

Gruss
Biber
[Edit: Das direkte Setzen des Pipe-Symbols "|" wird so nicht gehen.
Entweder Du nimmst ein anderes Zeichen (z.B. "@")
oder Du nimmst zuerst das Zeichen "@" und ersetzt es unmittelbar vor dem ECHOen.
01.
>set titles=bla@blubb@whatever 
02.
>set titles=%titles:@=^|% 
03.
>set titles 
04.
titles2=bla|blubb|whatever
Dann aber musst Du mit DelayedExpansion arbeiten, da alles innerhalb EINER For-Anweisung stattfindet.
[/Edit]
Bitte warten ..
Mitglied: evileye07
12.03.2007 um 23:37 Uhr
Erstmal ein großes Danke für die superschnelle Antwort,
aber leider fu[n]zt das noch nicht alles so wie gewollt.

Das Pipe-Symbols muss nicht unbedingt sein,
es kann natürlich auch ein anderes Zeichen (@) genommen werden.

Das Aneinanderhängen der Songtitel funktioniert nicht wie gewollt,
es steht statt z.b. songa@songb@songc -> ~0,-1 da.
Ich kann den "AddTitle-Ablauf" zwar verstehen, aber weiß nicht so ganz was bei der Ausgabe
@echo %titles:~0,-1% passieren soll, ohne Parameter (~0,-1) @echo %titles:% wird ECHO ist ausgeschaltet (OFF). angezeigt.

Die zweite for-Schleife müßte vor dem Auslesen der Songnamen geschlossen werden,
damit vor dem Songtitel-String nur einmal die Alben-Informationen stehen.

@echo off & setlocal enableDelayedExpansion
for /f "tokens=1-4 delims=\" %%a in ('dir ..\..\ /S /B /O /AD') do (
if not "%%d"=="" if not "%%c"=="index" (
for /f "tokens=1-3 delims=-" %%i in ("%%d") do ( call :Trim %%i,%%j,%%c,%%k )
for /f "tokens=2 delims=-" %%x in ('dir "%%a\%%b\%%c\%%d\*.mp3" /B') do call :AddTitle %%x
@echo %Album%,%Artist%,%Ordner%,%Jahr%,%titles:~0,-1%
)))
pause
goto :eof

:Trim
Set Album=%1
set Artist=%2
set Ordner=%3
set Jahr=%4
goto :eof

:AddTitle
If [%1]==[] Set "Titles=" & goto :eof
Set Titles=%Titles%%1@
goto :eof


Allerdings wird der Ordnername bei "delims=- " durch die im Albennamen enthaltenen Leerzeichen
ebenfalls falsch zerpflückt, ich mach mal noch ein konkreteres Daten-Beispiel:

1.Ordner:

c:\music\1\Hans Heimlich - Meine besten Hits - 1925\

darin enthalten die Songs:

[01] Hans Heimlich - Hurra.mp3
[02] Hans Heimlich - Morgen.mp3
[03] Hans Heimlich - Werd ich 20.mp3

2.Ordner:

c:\music\2\Gundula Grantig - Best of Gundula - 2008\

darin enthalten die Songs:

[01] Gundula Grantig - Born 1908.mp3
[02] Gundula Grantig - Yesterday.mp3
[03] Gundula Grantig - I was young.mp3


und daraus soll dann genau Folgendes werden:

#Hans Heimlich,Meine besten Hits,1925,1,Hurra.mp3@Morgen.mp3@Werd ich 20.mp3
#Gundula Grantig,Best of Gundula,2008,1,Born 1908.mp3@Yesterday.mp3@I was young.mp3



Hast du vielleicht noch weiteren Rat wie das gelingen kann?

Nochmals vielen Dank für Deine Mühe,
Gruss evileye
Bitte warten ..
Mitglied: Biber
13.03.2007 um 08:38 Uhr
Moin evileye07,

ich habe mal versucht, diesen "call: AddTitle %%x"-Aufruf zu isolieren und separat zu testen.

Zumindest dort muss eine kleine Anpassung rein.
01.
::evilexe2.bat 
02.
@echo off & setlocal 
03.
for /f "eol=; tokens=2 delims=-" %%x in (f:\temp\titles.txt) do call :AddTitle %%x 
04.
echo %titles:~0,-1% 
05.
goto :eof 
06.
 
07.
:AddTitle 
08.
If [%1]==[] Set "Titles=" & goto :eof 
09.
<b>Set Titles=%Titles%%*@</b> 
10.
REM <b>Hier Parameter %* statt Parameter%1 !!</b> 
11.
goto :eof 
12.
:: ----snapp evileye.bat 
13.
------------ 
14.
Ergebnis: 
15.
>type f:\temp\titles.txt 
16.
[01] Hans Heimlich - Hurra.mp3 
17.
[02] Hans Heimlich - Morgen.mp3 
18.
[03] Hans Heimlich - Werd ich 20.mp3 
19.
20.
;2.Ordner: 
21.
22.
;c:\music\2\Gundula Grantig - Best of Gundula - 2008 
23.
;darin enthalten die Songs: 
24.
25.
[01] Gundula Grantig - Born 1908.mp3 
26.
[02] Gundula Grantig - Yesterday.mp3 
27.
[03] Gundula Grantig - I was young.mp3 
28.
 
29.
>f:\temp\evileye2 
30.
Hurra.mp3@Morgen.mp3@Werd ich 20.mp3@Born 1908.mp3@Yesterday.mp3@I was young.mp3
Und im obigen Source:
Streiche: @echo %Album%,%Artist%,%Ordner%,%Jahr%,%titles:~0,-1%
Setze: @echo %Album%,%Artist%,%Ordner%,%Jahr%,!titles:~0,-1!


Wir werden uns da schon rantasten...

Gruss
Biber

Ich ändere es oben im Source.
Bitte warten ..
Mitglied: bastla
13.03.2007 um 08:52 Uhr
Hallo Ihr Beiden!

Ich hab auch ein wenig gebastelt und bin bei folgendem Stand:
01.
@echo off & setlocal enableDelayedExpansion 
02.
for /f "tokens=1-4 delims=\" %%a in ('dir ..\..\ /S /B /O /AD') do ( 
03.
if not "%%d"=="" if not "%%c"=="index" ( 
04.
for /f "tokens=1-3 delims=-" %%i in ("%%d") do ( call :Trim "%%i","%%j","%%c","%%k" ) 
05.
set "Titles=" 
06.
for /f "tokens=2 delims=-" %%x in ('dir "%%a\%%b\%%c\%%d\*.mp3" /B') do call :AddTitle "%%x" 
07.
@echo #!Album!,!Artist!,!Ordner!,!Jahr!,!Titles:~0,-1! 
08.
)) 
09.
pause 
10.
goto :eof 
11.
 
12.
:Trim 
13.
Set Album=%~1 
14.
Set Album=%Album:~0,-1% 
15.
set Artist=%~2 
16.
set Artist=%Artist:~1,-1% 
17.
set Ordner=%~3 
18.
set Jahr=%~4 
19.
set Jahr=%Jahr:~1% 
20.
goto :eof 
21.
 
22.
:AddTitle 
23.
Set Title=%~1 
24.
Set Titles=%Titles%%Title:~1%@ 
25.
goto :eof
Grüße
bastla

[Edit] Die ganze Leerzeichen-Eliminiererei gehörte noch aus der "echo"-Zeile ins ":Trim" verlegt ... [/Edit]
[Edit2] ... und der Ordnung halber auch einmal das "#" an den Anfang der Ausgabezeile gesetzt. [/Edit2]
Bitte warten ..
Mitglied: Biber
13.03.2007 um 08:58 Uhr
Moin bastla,

auch nicht schlecht...
@echo !Album:~0,-1!,!Artist:~0,-1!,!Ordner!,!Jahr:~1!,!Titles:~0,-1!
Davor hatte ich zurückgeschreckt, falls mal bei den vorhandenen .mp3's der Trennstrich nicht von einem Leerzeichen gefolgt sein sollte (also diese Konvention "bla - blubb - mehr blubb" irgendwo nicht sauber eingehalten ist).

Sonst keinerlei Einwände...
Grüsse
Biber
Bitte warten ..
Mitglied: bastla
13.03.2007 um 09:02 Uhr
@Biber

Wozu gibt's dann Konventionen?
Ich hab's noch etwas ordentlicher gemacht (wenn's schon extra ein ":Trim" gibt).

Übrigens: Wenn Alben/Interpreten/Titel mit "!" im Namen dabei sind ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
13.03.2007 um 09:32 Uhr
@bastla
Wenn Alben/Interpreten/Titel mit "!" im Namen dabei sind ...
...sieht für mich nicht so aus, als wäre er ein Punk-Fan....

Andererseits: "Theo...wir fahrn nach Lodz!" *grübel*

Ach menno, das wird wieder viel zu komplex.... <grinz>

Grüße
Biber
Bitte warten ..
Mitglied: bastla
13.03.2007 um 09:41 Uhr
@Biber

Obwohl, wenn's nur ein "!" wäre, ging's ja noch ...

Ach menno, das wird wieder viel zu komplex.... <grinz>
Na dann :
01.
:Trim 
02.
Set "Album=%~1" 
03.
if "%Album:~-1%"==" " Set "Album=%Album:~0,-1%" 
04.
set "Artist=%~2" 
05.
if "%Artist:~0,1%"==" " Set "Artist=%Artist:~1%" 
06.
if "%Artist:~-1%"==" " Set "Artist=%Artist:~0,-1%" 
07.
set "Ordner=%~3" 
08.
set "Jahr=%~4" 
09.
if "%Jahr:~0,1%"==" " Set "Jahr=%Jahr:~1%" 
10.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: evileye07
14.03.2007 um 15:13 Uhr
Hallo,

vielen vielen Dank euch Beiden, dass schaut doch schon richtig gut aus. *freu
Hab leider gestern keine Zeit zum Nachschauen hier gehabt.

Ein paar kleine "Fehler" bzw. Fragen hab ich noch.

Sobald ein & oder anderes "Steuerzeichen" im Ordnernamen/Song- steht,
wird folgendes ausgegeben:

z.b. c:/music/1/Gundula Grantig - Best of Gundula - 2008/[04] Holla & die Waldfee.mp3

Der Befehl "die Waldfee.mp3" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.


Wenn ich nach dem @echo den String in das Textfile hineinschreibe, fehlt alles
nach diesem Zeichen, sprich "Holla @".
Es stellt sich also die Frage wie ich diese Zeichen maskieren kann?
Ich hab zwar Bibers "String mit Steuerzeichen (pre-Batch-Tut IV ;) gelesen, bekomm es aber trotzdem net hin.

Wäre es zudem sinnvoll die Variablen/Speicher nach Abarbeitung per for-schleife zu löschen/freizugeben? So ungefähr:

fOR %%z in (!Album! !Artist! !Ordner! !Jahr! !Titles!) do SET %%z=


Mein Skript sieht zur Zeit so aus:

@echo off & setlocal enableDelayedExpansion
set datei="daten.js"

IF exist %datei% (
attrib -R %datei%
del %datei%
)

for /f "tokens=1-4 delims=\" %%a in ('dir ..\..\ /S /B /O /AD') do (
if not "%%d"=="" if not "%%c"=="index" if not "%%c"=="1" (
for /f "tokens=1-3 delims=-" %%i in ("%%d") do ( call :Trim "%%i","%%j","%%c","%%k" )
set "Titles="
for /f "tokens=2 delims=-" %%x in ('dir "%%a\%%b\%%c\%%d\*.mp3" /B') do call :AddTitle "%%x"
@echo #!Album!,!Artist!,!Ordner!,!Jahr!,!Titles:~0,-1!>>%datei%
))

attrib +R %datei%
goto :eof

:Trim
Set "Album=%~1"
if "%Album:~-1%"==" " Set "Album=%Album:~0,-1%"
set "Artist=%~2"
if "%Artist:~0,1%"==" " Set "Artist=%Artist:~1%"
if "%Artist:~-1%"==" " Set "Artist=%Artist:~0,-1%"
set "Ordner=%~3"
set "Jahr=%~4"
if "%Jahr:~0,1%"==" " Set "Jahr=%Jahr:~1%"
goto :eof

:AddTitle
Set Title=%~1
Set Titles=%Titles%%Title:~1%@
goto :eof


Gruss
evileye

PS.
nee, ich bin kein kleener punker! :D
Bitte warten ..
Mitglied: bastla
14.03.2007 um 15:42 Uhr
Hallo evileye07!

Wie ist es, wenn Du auch bei "Set Title" die Anführungszeichen verwendest, also:
01.
:AddTitle 
02.
Set "Title=%~1" 
03.
Set "Titles=%Titles%%Title:~1%@"
Wäre es zudem sinnvoll die Variablen/Speicher nach Abarbeitung per for-schleife zu löschen/freizugeben?
Wenn Du gesteigerten Wert darauf legst, kannst Du ja ein endlocal einbauen ...

Grüße
bastla
Bitte warten ..
Mitglied: evileye07
14.03.2007 um 18:33 Uhr
Danke bastla,

so geht es.

Eine Frage noch zu der Ausrufezeichen(variablen)problematik, ist es möglich diese irgendwie zu umgehen?

Befindet sich in einem Ordnernamen/Song- ein "!" und Setlocal ist gesetzt, wird dieses als Leerzeichen gesehen, bzw. der Pfad in der folgenden for-Schleife nicht gefunden.

Da blick ich jetzt nimmer durch...

Gruss
evileye
Bitte warten ..
Mitglied: Biber
14.03.2007 um 19:16 Uhr
Moin evileye,

das Problem mit dem Ausrufungszeichen ist ein in der Tat ein saudummer Fehler,
der IMHO mehr über M$ aussagt, als ich mich je auch nur öffentlich anzudeuten trauen würde.

Lässt sich aber nicht mit vertretbarem Aufwand umgehen (soweit ich weiss).
Ich kann diese !-Zeichen auch nicht maskieren bzw. es ist mir nicht gelungen.

"Nicht mit vertretbarem Aufwand" heißt:
- ich würde als erstes überlegen, ob ich diese .mp3's mit Ausrufungszeichen vorher umbenennen kann oder ob diese Ausrufungszeichen tatsächlich für mich einen erhaltenswerten Informationsgehalt haben
- falls ich diese Ausrufungszeichen für absolut unverzichtbar hielte, dann...

- würde ich mir zuerst ein Becks aufmachen,
- und dann diese calllöcke auflösen, so dass jeweils ab Ende der FOR-Anweisung nur ein Call:sub steht
- in diesem call:sub kann dann die nächste FOR-Anweisung starten und ihrerseits ein call :sub2 aufrufen
-----> so kann ich auf die DelayedExpansion verzichten

-oder-
ich umgehe die DelayedExpansion, indem ich stattdessen mit "CALL %%%%var%%%%%" -Aufrufen arbeite...
(aber darüber möchte ich gar nicht erst sprechen, das ist absolut unleserlich, streiche Variante 2)

Bitte prüfe erst mal für Dich, ob diese Ausrufungszeichen verzichtbar wären in den .mp3-Titeln.
Dann sehen wir weiter.

Gruss
Biber
Bitte warten ..
Mitglied: bastla
14.03.2007 um 19:21 Uhr
@Biber

und dann diese calllöcke auflösen, so dass jeweils ab Ende der FOR-Anweisung nur ein Call:sub steht
Daran versuch' ich mich gerade (bevor ich das Ganze in VBS mache) ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
14.03.2007 um 19:25 Uhr
@bastla

Und wenn er dann sacht: "Och, eigentlich sind mir diese Ausrufungszeichen eher unwichtig..."???

Oder: "Och, dann warte ich eben kurz, bis M$ eine stabile bugbereinigte CMD-Version herausbringt.." ???

Grüsse
Biber
Bitte warten ..
Mitglied: bastla
14.03.2007 um 19:33 Uhr
@Biber

Wenn er das sacht, isser zu spät dran

01.
@echo off & setlocal 
02.
for /f "tokens=1-4 delims=\" %%a in ('dir ..\..\ /S /B /O /AD') do call :ProcessDir "%%a","%%b","%%c","%%d" 
03.
goto :eof 
04.
 
05.
:ProcessDir 
06.
if %4=="" goto :eof 
07.
if %3=="" goto :eof 
08.
if %3=="index" goto :eof 
09.
if %3=="1" goto :eof 
10.
for /f "tokens=1-3 delims=-" %%i in (%4) do call :Trim "%%i","%%j",%3,"%%k" 
11.
set "Titles=" 
12.
for /f "tokens=2 delims=-" %%x in ('dir "%~1\%~2\%~3\%~4\*.mp3" /B') do call :AddTitle "%%x" 
13.
set "Zeile=#%Album%,%Artist%,%Ordner%,%Jahr%,%Titles:~0,-1%" 
14.
set "Zeile=%Zeile:&=^&% 
15.
echo %Zeile% 
16.
goto :eof 
17.
 
18.
:Trim 
19.
Set "Album=%~1" 
20.
if "%Album:~-1%"==" " Set "Album=%Album:~0,-1%" 
21.
set "Artist=%~2" 
22.
if "%Artist:~0,1%"==" " Set "Artist=%Artist:~1%" 
23.
if "%Artist:~-1%"==" " Set "Artist=%Artist:~0,-1%" 
24.
set "Ordner=%~3" 
25.
set "Jahr=%~4" 
26.
if "%Jahr:~0,1%"==" " Set "Jahr=%Jahr:~1%" 
27.
goto :eof 
28.
 
29.
:AddTitle 
30.
Set "Title=%~1" 
31.
Set "Titles=%Titles%%Title:~1%@" 
32.
goto :eof
Sagtest Du weiter oben was von Komplexität? Ich hoffe, wir kommen ohne aus ...

Grüße
bastla

P.S.:
... bis M$ eine stabile bugbereinigte CMD-Version herausbringt.." ???
Ich dachte, die gibt's schon - heißt doch "bash" oder so ... *sinnier*

[Edit] Meckervorbeugungsmaßnahme in Batch-Zeile 1 getroffen [/Edit]
Bitte warten ..
Mitglied: Biber
14.03.2007 um 19:42 Uhr
@bastla

Ja, ja, in meiner Jugend war ich auch so ungestüm.. *seufz*

Wenn noch ein " & setlocal" hinter dem "@echo off" stünde, dann könnten wir es evileye07 ja vielleicht anbieten...
So gibt es bestimmt wieder nur Mecker ...
heißt doch "bash" oder so...
Quatsch, die bash kann ja noch nicht mal selber BlueScreens erzeugen...
..außerdem ist das doch von irgendwelchen OpenSource-Anarchisten oder so, glaub ich...
Das hat bestimmt weniger Zukunft als M$...

Grüsse und danke
Biber
Bitte warten ..
Mitglied: bastla
14.03.2007 um 19:54 Uhr
@Biber

Nö, Mecker woll'n wir nich ...

Quatsch, die bash kann ja noch nicht mal selber BlueScreens erzeugen...
Ich nehme an, dircolors gilt in dem Zusammenhang nicht (nicht blau genug), aber wie wär's mit [e[0;37;0;44m]?

Grüße
bastla
Bitte warten ..
Mitglied: evileye07
16.03.2007 um 14:39 Uhr
Juten Tach,

also nochmal vielen Dank für eure Hilfe.

Die Ausrufezeichen waren nicht unbedingt notwendig,
aber bastla war ja etwas schneller... und hat mir weitere ren-Arbeit erspart.

Das bat-File ist nun fertig,
es mußten noch einige Zeichen \( \) \' für das spätere Auslesen per Java-Script maskiert werden (siehe :ReplaceString).
Ausserdem hab ich die Parameter für die Extrahierung geändert (also aus dem Komma (Artist,Album,Ordner,Jahr) nen Pipe (da bei Komma innerhalb des Songnamen das Array von js nicht korrekt ausgelesen wird) und sicherheitshalber zwischen den Songnamen aus dem @ ein ? )

So schauts aus:

@echo off & setlocal

set datei="daten.js"
IF exist %datei% (
attrib -R %datei%
del %datei%
)

echo var daten = unescape('\>>%datei%
for /f "tokens=1-4 delims=\" %%a in ('dir ..\..\ /S /B /O /AD') do call :ProcessDir "%%a","%%b","%%c","%%d"
echo ');>>%datei%
attrib +R %datei%
endlocal
goto :eof

:ProcessDir
if %4=="" goto :eof
if %3=="" goto :eof
if %3=="index" goto :eof
REM if %3=="1" goto :eof
for /f "tokens=1-3 delims=-" %%i in (%4) do call :Trim "%%i","%%j",%3,"%%k"
set "Titles="
for /f "tokens=2 delims=-" %%x in ('dir "%~1\%~2\%~3\%~4\*.mp3" /B') do call :AddTitle "%%x"
set "Zeile=#%Album%^|%Artist%^|%Ordner%^|%Jahr%^|%Titles:~0,-1%\"
set "Zeile=%Zeile:&=^&%
echo %Zeile%
echo %Zeile%>>%datei%
goto :eof

:Trim
REM Set "Album=%~1"
call :ReplaceString "%~1" "Album"
if "%Album:~-1%"==" " Set "Album=%Album:~0,-1%"
REM set "Artist=%~2"
call :ReplaceString "%~2" "Artist"
if "%Artist:~0,1%"==" " Set "Artist=%Artist:~1%"
if "%Artist:~-1%"==" " Set "Artist=%Artist:~0,-1%"
set "Ordner=%~3"
set "Jahr=%~4"
if "%Jahr:~0,1%"==" " Set "Jahr=%Jahr:~1%"
goto :eof

:AddTitle
REM Set "Title=%~1"
call :ReplaceString "%~1" "Title"
Set "Titles=%Titles%%Title:~1%?"
goto :eof

:ReplaceString
set "String=%~1"
set "String=%String:'=\'%
set "String=%String=\(%
set "String=%String=\)%
set "%~2=%String%"
REM echo "%String%"
goto :eof

So, jetzt mach ich mir nen Pils auf ;)

Vor einer Woche hatt ich noch gar keine Peilung vom "batchen",
aber Ihr habt mir ganz gut auf die Sprünge geholfen.

Nochmals vielen Dank!

Gruss
evileye

PS.
Wenn ich fertig bin, kann ich ja euch mal das komplette HTML/JavaScript schicken,
d.h. falls Ihr überhaupt daran Interesse habt.
Bitte warten ..
Mitglied: Biber
16.03.2007 um 15:36 Uhr
Gern geschehen, evileye07,

natürlich wollen wir gerne das HTML/JScript sehen...
Kannst Du ja wenn es (heute nachmittag oder so) final ist, ist einem neuen Kommentar druntersetzen.

Ich lasse den Thread offen und wünsch schon mal ein schönes Wochenende

Gruss
Biber
Bitte warten ..
Mitglied: evileye07
17.03.2007 um 14:41 Uhr
Ja danke,

es wird wohl aber noch ein wenig dauern bis alles fertig ist,
ich kann zur Zeit nicht hintereinander dran arbeiten.

Auch dir auch nen schönes Wochenende.

PS. Hast du eigentl. was mit Fußball am Hut?
Bitte warten ..
Mitglied: Biber
18.03.2007 um 19:17 Uhr
Hast du eigentl. was mit Fußball am Hut?
Nur wenn der deutsche Meister 2007 spielt, so wie heute gegen Mainz...

Grüsse von da, wo die Weser einen Bogen macht
Biber
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Mehrere Ordnernamen auslesen und in eine Variable schreiben (5)

Frage von schmitho zum Thema Batch & Shell ...

Batch & Shell
gelöst BATCH: Daten aus Textdatei auslesen und in neue Textdatei separieren (9)

Frage von Manuel1234 zum Thema Batch & Shell ...

Windows Server
gelöst AD-User einer AD-Gruppe auslesen und in ein File schreiben (15)

Frage von Estefania zum Thema Windows Server ...

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 (14)

Frage von liquidbase zum Thema Windows Update ...

DSL, VDSL
Problem mit variernder Internetgeschwindigkeit (12)

Frage von schaurian zum Thema DSL, VDSL ...