45821
Goto Top

Stapelverarbeitung *.bat-Datei, welche andere *.bat-Dateien wiederum ausführen soll

Stapelverarbeitung [*.bat-Datei, welche andere *.bat-Dateien wiederum ausführen soll]

Hallo ihr Programmierer!

Ich bräuchte bitte eure Hilfe. Und zwar habe ich folgendes Problem: Ich habe eine kleine Musiksammlung als Backup meiner CD-Sammlung im MP3-Format auf meiner Festplatte. Ich beiss mir schon seit über einem Jahr die Zähne daran aus. Und zwar möchte ich, dass - nach folgendem Schema - ein Skript/Tool/Programm/oder ähnliches meine Ordner durchforstet und diese dann in eine Text-Datei legt. Dazu habe ich ja schon ein nettes Skript. dirlist.bat heisst das gute Programm. Ich möchte aber nicht jedes Mal in den einzelnen Ordner gehen, um dirlist.bat auszuführen.

Ich brauch jetzt also noch - am besten eine .bat-Datei - welche hintereinanderweg alle *.bat-Dateien auf der Festplatte F:\ ausführt. Z.B.:

"musik\a\anton quartet\dirlist.bat"
"musik\b\black sabbath\dirlist.bat"
"musik\cchimaira\dirlist.bat"
...
..etc


Dazu wäre es sinnvoll, wenn es eine Konfigurationsdatei gibt (txt-file ist ok), wo ich die Order reinschreiben kann, welche *.bat-Dateien ausgeführt werden sollen (siehe Beispiel). Das würde mir erheblich die Arbeit erleichtern, da ich nicht nur von meiner Musiksammlung einen Überblick haben will, sondern auch von anderen Sachen, wie Office-Dokumente etc... Also, es geht hier um eine Stapelverarbeitung.


2. Problem:

Ich weiß, es gibt Tools wie dirlist.bat, Directory Lister 0.7.2 etc.. aber ich möchte eine *.bat-Datei haben (ich nenne sie jetzt einfach mal *.dirlist2000.bat) , die -nur- die Verzeichnisse listet, in eine *.txt-Datei schreibt. Und zwar nach folgendem Beispiel:

f:\musik\a\dirlist2000.bat


Hier liegt also dirlist2000.bat drinne. Der Ordner

"f:\musik\a\"

enthält aber noch den Unterordner

"anton quartet\album x" und "ali karascha kinh\album y"

Und in der Textdatei nach dem Ausführen der *.Bat-Datei soll dann drinne stehen:

*/zitat anfang/*
anton quartet\album x
ali karascha kinh\album y
*/zitat anfang/*

(Natürlich ohne */zitat anfang/* und */zitat anfang/*)


Es wäre echt cool, wenn ihr mir helfen könntet! Danke!


PS.: Sorry für meine umständliche Aussprache.

Content-Key: 55364

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

Printed on: April 16, 2024 at 11:04 o'clock

Member: miniversum
miniversum Mar 29, 2007 at 16:15:23 (UTC)
Goto Top
zu 1.:
Zum Datei erstellen (das Dus ncith mit Hand machen mußt):
dir /b /s dirlist.bat>dirlistbats.txt
Zum Batch Datei zum Starten der einzelnen dirlist.bat:
@for /F "delims=" %%a in (dirlistbats.txt) do call %%a

zu 2:
Hab ich nicht ganz verstanden: Willst Du wissen wie die Unterordner heißen oder der ganze?
Versuch mal ob du das hier meinst:
@for /F "delims=" %%a in ('dir /b /s /ad') do echo %%a>>Verzeichnisse.txt

miniversum
Mitglied: 45821
45821 Mar 29, 2007 at 16:26:16 (UTC)
Goto Top
Hi @ miniversum!

Herzlichen Dank für deinem schnellen Comment!!

Ich bin grad an der Uni an einen Rechner. Da ist leider nichts zu machen mit *.bat-File ausführen und testen und so. Leider! Ich speichere aber diese Website auf meinen USB-Stick und werde es heute abend noch zuhause testen! Und nochmals recht herzlichen Dank!

PS.: Na, es soll halt so aussehen in der erstellten *.txt-file :

artist_x\album_gz\

artist_s\album_fy\

artist_r\album_wi\

...
.. etc..

Kannst du das so machen, dass der Festplattenbuchstabe UND der Ordner \musik\ erst garnicht in die txt-file geschrieben wird? Danke!
Member: miniversum
miniversum Mar 29, 2007 at 16:54:29 (UTC)
Goto Top
ah ok dann müste deine .bat so aussehen (ungetestet):
@echo off & enabledelayedexpansion
for /F "delims=" %%a in ('dir /b /s /ad') do (
set verz=%%a
set verz=!verz:%CD%=!
echo !verz:~1!>>Verzeichnisse.txt
)

miniversum
Mitglied: 45821
45821 Mar 29, 2007 at 17:04:03 (UTC)
Goto Top
Cool!

Äähm, ich habe noch was vergessen, Sorry. Kannst du das so machen, dass die Textdatei genauso heißt, wie der Ordner heißt, -wo die *.bat-Datei drinne ist-?

Bsp.:


f:\musik\a\dir\batdatei.bat

///*wird gestartet!* ....


Resultat wäre also diese datei: "a.txt"

f:\musik\a\a.txt


danke!


PS.: Habe aktuelles xp pro, falls das helfen sollte. Hab gelesen, dass es für die Schreibweisen Unterschiedlichkeiten gibt zwischen den einzelnen Windows-Versionen...
Member: Biber
Biber Mar 29, 2007 at 17:15:29 (UTC)
Goto Top
Moin socialbreakz,

willkommen im Forum.

Ich würde miniversums Ansatz weiterspinnen und das ganze einmalig mit einem Einzeiler machen.

Demo am CMD-Prompt:
for /f "tokens=1-3,* delims=\" %i in ('dir /a-d /b /s f:\musik\*.mp3' ) do @echo %l>>"%i\%j\%k\dirlist.txt"  
Sieht also ein Ausschnitt der Sammlung so aus
f:\musik\x\artist_x\album_gz
f:\musik\s\artist_s\album_fy
f:\musik\r\artist_r\album_wi bla blubb
..würde rausfallen...
echo artist_x\album_gz\Titel eins.mp3 >>"f:\musik\x\dirlist.txt"  
echo artist_x\album_gz\Titel zwei.mp3 >>"f:\musik\x\dirlist.txt"  
echo artist_x\album_gz\Titel drei.mp3 >>"f:\musik\x\dirlist.txt"  
echo artist_s\album_fy\Song A.mp3 >>"f:\musik\s\dirlist.txt"  
echo artist_s\album_fy\Song B.mp3 >>"f:\musik\s\dirlist.txt"  
echo artist_s\album_fy\Song C.mp3 >>"f:\musik\s\dirlist.txt"  
...
echo artist_r\album_wi bla blubb\Jingle X.mp3 >>"f:\musik\r\dirlist.txt"  

Falls das Ganze eine Ebene tiefer hin soll (also die dirlist.txt auf Album-Ebene liegen soll), dann eben die FOR-Parameter etwas hin und her schieben.

Dann kannst Du immer noch bei Bedarf vorher alle vorhandenen dirlist.txt rekursiv löschen (del /s /q f:\musik\dirlist.txt).
Oder einen Batch mit optionalem Parameter "Ab-Unterordner" draus machen:
::----DirList1998.bat
@for /f "tokens=1-3,* delims=\" %%i in ('dir /a-d /b /s f:\musik\%1\*.mp3' ) do @echo %%l>>%%i\%%j\%%k\dirlist.txt  
Aufruf von "DirList1998.bat c" würde dann nur die *.mp3s unterhalb von f:\musik\c\ abfackeln.

Gruss
Biber

[Edit] Gerade dieses hier gelesen:
Resultat wäre also diese datei: "a.txt"
f:\musik\a\a.txt
> würde bei meiner Variante bedeuten, dass nicht in "%%i\%%j\%%k\dirlist.txt" umgeleitet wird, sondern in "%%i\%%j\%%k\%%j.txt".
[/Edit]
Mitglied: 45821
45821 Mar 29, 2007 at 17:26:52 (UTC)
Goto Top
Cool! Dankesehr für deine umfangreiche Hilfe! Programmieren müsste man können... Kann ich leider nicht, außer ein wenig an php/css/html rumfummeln krieg ich ja auch noch hin. Nagut, dafür mache ich halt Musik face-wink

Da sind schon krasse Sachen dabei! Ich freue mich schon, wenn ich zuhause bin!


PS.: Ich muss die zitate in den windows-editor reinschreiben und als dateiname_sowieso.bat speichern, oder?

Ich hab da nochmal ein Frage:...

Gibt es da noch eine batchfile, welche man dann auf f:\ zu liegen hat, welche dann alle geschriebenen Textdateien in ein bestimmten Verzeichnis x reinkopiert? wäre ja mühselig, alle *.txt-files in den jeweiligen Ordner rauszufischen und dann in den Wunschordner zu kopieren (wo dann also alle erstellten *.txt-files drinne sind). Ich mein, ich kriege es bestimmt auch manuell (per Windowssuche) hin, aber so toll ist das ja nun auch wieder nicht.

Wie gesagt, großen Dank für eure Hilfe!

So, mit weiteren Wünschen geh ich euch jetzt hoffentlich nicht mehr auf die Nase face-wink
Member: Biber
Biber Mar 29, 2007 at 18:52:29 (UTC)
Goto Top
So, socialbrakz,

um die Restfragen auch noch kurz zu beantworten: Ja. Ja.

Ja. Die Sachen, die miniversum und ich als Batchfragmente hier gepostet haben, per Copy & Paste in einen Editor kopieren, speichern als DenkDirWasKreativesAus.bat und testen.

"Testen" heisst, Du solltest erst einmal diese Anweisungen nur simulieren lassen.
Beispiel: wenn Du miniversums Schnipsel nimmst.
 @for /F "delims=" %%a in ('dir /b /s /ad') do echo %%a>>Verzeichnisse.txt  
..der ja in einer Batch laufen soll, dann teste erstmal den wesentlichen Teil am CMD-Prompt
@for /F "delims=" %a in ('dir /b /s /ad') do echo %a  
[Am CMD-Prompt haben die Zählvariablen ein Prozentzeichen, im Batch zwei].

Wenn Du mein "DirList1998.bat" testen willst, kopiere Dir folgenden Test-Schnipsel als .bat-Datei:
::----DirList1998Test.bat
@for /f "tokens=1-3,* delims=\" %%i in ('dir /a-d /b /s f:\musik\%1\*.mp3' ) do @echo @echo %%l^>^>%%i\%%j\%%k\dirlist.txt  
Dann siehst Du, was passieren würde und kannst ggf. anpassen.

Zu der Frage mit dem "alle dirlist.txt einsammeln und in anderes Sammel-Verzeichnis kopieren":
Bekommst Du jetzt selbst hin, wenn Du die obigen "FOR /F ...in ('DIR /b /s ...')"-Konstrukte verstanden hast.

Jetzt müsstest Du ja "nur" alle ".txt"-Dateien aus allen Unterverzeichnissen unerhalb von "F:\Musik" in einen anderen Pfad kopieren.
Eventuell solltest Du eine seltenere Extension als .txt verwenden, damit du auch wirklich nur diese Dateien erwischt.
Das wird am CMD-Prompt so etwas wie ...
 For /f "delims=" %i in ('dir /b /s f:\Musik\*.txt') do @copy "%i" "x:\Sammelbecken\%~nxi"   

Du findest einige ähnliche Beispiele hier im Forum in Batch und Shell, auch mit Playlists und vergleichbarem.

Gruss
Biber
Mitglied: 45821
45821 Mar 30, 2007 at 07:45:24 (UTC)
Goto Top
Thx für deinen großen informativen Comment!

Cool! Ich habe gestern abend bis halb 1 noch ein wenig herumexperimentiert und bin schon zum größten Teil zufrieden! Dank euren super Beiträgen!


Ich werde das dann so machen, dass die *.bat-file(s) dann nicht eine *.txt-file erstellt, sondern eine *.html-file wird. D.h. dass da noch irgendwo <header></header>, <body> /der Inhalt, der von der *.bat-file kommt/ </body> <externer *.css-file-link>. etc.. in die *.bat-file reinkommt. Resultat: Es wird also eine korrekte HTML-File erstellt. Diese kann ich dann auf meinen localhost (xampp) kopieren und habe dann eine Art "statische Datenbank", welche ich immer nur mit ein paar *.bat-files aktualieren muss. Genial!

Die zu erstellende HTML-file brauch keinerlei Tabellen (Artist, Album, CD x), zumal das eh zu umständlich ist.

Man könnte natürlich noch (je nach Verzeichnistiefe (depth)) das farblich anpassen. Z.B.: Ordnertiefe 1 (buchstabe x\) = #FF0000
Ordnertiefe 2 (artist x\) = #CC0000
Ordnertiefe 3 (album x\) = #FFFF00
Ordnertiefe 4 (cd x) = #000000

Ist aber ziemlich umständlich, wäre aber optisch reizvoller, als die simple Textdatei.
Member: Biber
Biber Apr 02, 2007 at 05:53:13 (UTC)
Goto Top
Moin socialbreakz,

danke für die Rückmeldung.

Dann gehe Dich davon aus, dass Dein Batch im Laufe der nächsten Zeit noch länger wird...

Ich hoffe jedenfalls, Du postest eine Skizze Deiner Lösung hier als neuen Beitrag bzw. als Tutorial, sobald Du damit zufrieden bist.. face-wink

Ich setze jetzt allerdings schon mal den Status dieses Beitrags auf "Gelöst" und "Geschlossen, weil ...
... die ursprüngliche Fragestellung mit "...*.bat, die andere *.bat ausführen soll.." ist ja irgendwo nicht mehr im Fokus.

Sollte es noch Nachfragen von Deiner Seite zu dem oben begonnenen Batch geben, dann mache ich gerne auf PN-Aufforderung diesen Beitrag wieder auf.

Ansonsten mach ich hier an dieser Stelle mal einen Schnitt. <----katt----->

Schöne Woche Dir und melde Dich
Biber