jiggyjones
Goto Top

Batch Datei schreiben die Filenamen Ausliest und kürzel mit Namen ersetzt

Hallo,

ich habe etliche files die ungefähr so aufgebaut sind :

123gln_edumaze.wav
321hhn_motoram.wav

usw...

nun möchte ich wissen ob es einen batch befehl gibt womit ich eine .bat datei schreiben kann die jeweils die ersten 3 buchstaben ausliest und anhand einer tabelle oder sonstiges dann diesen namen ersetzt und mir den in eine separate txt datei oder sonstiges schreiben kann...

quasi :

wenn in dem filenamen der kürzel gln wie oben bei 123gln_edumaze.wav vorkommt dann bitte eine txt datei erstellen und das wort gloony einfügen
und wenn mehrere files in einem ordner sind dann sollen auch deren kürzel (es gibt ca. 20verschiedene kürzel) in die selbe txt datei eingefügt werden...

sprich:
if gln dann gloony in txt001.txt
if hhn dann herohahn in txt001.txt mit einfügen
usw..

da sind dann ca. 10 files in einem ordner mit verschiedenen kürzeln und die sollen dann alle mit dem richtigen namen in die text datei die in dem ordner erstellt wird automatisch reingeschrieben werden...

kann mir da einer helfen? eigentlich müsste das doch mit einem normalen IF befehl in der batch datei funktionieren, oder?
Kommentar vom Moderator Biber am Jan 21, 2011 um 12:02:36 Uhr
Verschieben von "Datenbanken" nach Papierkorb erstmal nach "Bätchkrams".

Content-Key: 159146

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

Printed on: April 19, 2024 at 19:04 o'clock

Member: pieh-ejdsch
pieh-ejdsch Jan 21, 2011 at 11:16:36 (UTC)
Goto Top
moin jiggyjones,

nun möchte ich wissen ob es einen batch befehl gibt womit ich eine .bat datei schreiben kann
der Befehl heisst: Notepad

das kannst Du mit einer For schleife realisieren, welche die Dateinamen ausliest und in einer verschachtelten Schleife alle Zeichen, welche keine Buchstaben sind vom beginn des Dateinamens entfernt. Und die nächsten drei Zeichen mit Deiner Tabelle/Liste vergleicht.

Gruß Phil
Member: jiggyjones
jiggyjones Jan 21, 2011 at 11:33:13 (UTC)
Goto Top
da ich keinen plan davon habe, könntest du mir das genauer erklären? oder den batch inhalt mir hier rein schreiben so das ich nur die kürzel einfügen/erweitern muss?

vielen vielen dank
Member: pieh-ejdsch
pieh-ejdsch Jan 21, 2011 at 11:51:21 (UTC)
Goto Top
ist heute ist schon wieder Freitag?.

was noch zu klären ist:
  • wie sieht die Vergleichsdatei aus und wie ist der Name dieser?
  • sollen nur die 1. drei Führenden Zeichen (nicht Buchstaben) elemeniert werden oder mehr?
  • nichts Umbenennen, sondern nur in die Andere.txt reinschreiben?
  • wenn nichts Umbenannt wird - soll Andere.txt neugeschrieben oder fortgeführt werden (Bei erneuter Batchbenutzung)?
  • wirklich nur 10 Dateien?

Gruß Phil
Member: jiggyjones
jiggyjones Jan 21, 2011 at 12:15:42 (UTC)
Goto Top
also die vergleichsdatei heißt abrevation.txt und dort stehen halt die kürzel und deren bedeutung gleich dahinter..hab sie auch als xls datei hier

die ersten drei buchstaben nach der zahl sollen aufgelöst werden...ja nur um die geht es

es soll nichts umbenannt werden sondern immer jeweils eine text datei in dem ordner erstellt werden mit den ergebnissen aus der konstellation der kürzel und der abrevation.txt

bei erneuter batch benutzung sollte dann wieder eine neue txt datei in dem jeweiligen ordner wo ich die batch datei rein kopiere wieder erstellt werden

es könnten auch mehr als 10 dateien sein aber wenn du mir eine auflistung gibst wie das ganze in der batch datei aussieht kann ich einfach die schlagwörter ersetzen und diesen batch dann fortsetzen

face-smile
Member: pieh-ejdsch
pieh-ejdsch Jan 21, 2011 at 13:10:41 (UTC)
Goto Top
so richtig weiss ich immer noch nicht, was in die Ausgabe.txt hineingeschrieben werden soll.
sprich:
if gln dann gloony in txt001.txt
if hhn dann herohahn in txt001.txt mit einfügen


das müsste dann ungefähr so gehen, wenn in der Filterdatei nach dem drei Buchstaben ein Leerzeichen kommt und dann das anderen Wort einDoppelpunkt kommt und dann die drei Buchstaben.
@echo off & setlocal
set "Filterdatei=E:\abrevation.txt"  
set "Ausgabe=E:\Percusions.csv"  
set "TempoS=1-70:slow"  
set "TempoM=71-110:Mid Tempo"  
set "TempoF=111-180:Uptempo"  
:begin
if "%~1" == "" (pushD "%~dp0") else pushD "%~1"  
for %%h in ("%cd%") do (  
	for %%i in (*) do for /f "tokens=* delims=1234567890" %%j in ("%%~ni") do if not "%%~ni" == "%%j" (  
		set "Name=%%j"  
		setlocal enabledelayedexpansion
		for /f "tokens=1* delims=:0" %%k in ("!Name:~0,3!:!Name:~3,3!") do (  
			endlocal
			for /f "usebackq tokens=1,2 delims=:" %%m in ("%Filterdatei%") do if "%%n" == "%%~k" (  
				for %%o in ("%tempoS%" "%tempoM%" "%tempoF%") do for /f "tokens=1,2* delims=-:" %%p in ("%%~o") do if %%p leq %%l if %%q geq %%l (  
					for %%u in ("::%%~nxh:%%r") do (  
						if defined %%~u (
							setlocal enabledelayedexpansion
							for /f "tokens=1* delims==" %%s in ('set "::%%~nxh:%%r"') do (  
								echo "%%~t"|find "%%m" >nul && endlocal || (endlocal&set "::%%~nxh:%%r=%%~t,%%m")  
						)	) else set "::%%~nxh:%%r=%%m"  
)	)	)	)	)	)	
popD
if not "%~2" == "" shift & goto :begin  
(
for /f "tokens=1,2,3 delims=:=" %%k in ('set :: 2^>nul') do (  
	echo %%k;%%m;%%l
	set "::%%k:%%l="  
)
)>"%Ausgabe%"  


[Edit: Fehler(chen) beseitigt]

Gruß Phil
Member: jiggyjones
jiggyjones Jan 21, 2011 at 13:16:04 (UTC)
Goto Top
sag mal phil kann ich dich bei msn oder icq adden? würde dir dann gern mehr infos schicken face-smile
Member: Biber
Biber Jan 21, 2011 at 13:27:49 (UTC)
Goto Top
Moin jiggyjones,

willkommen im Forum.

Zitat von @jiggyjones:
sag mal phil kann ich dich bei msn oder icq adden?
Dein Thread dreht sich doch darum, dass du nach wenigen Prozessmetern erstmal die kryptischen dreibuchstabigen Abbreviations auflösen willst,
weil es sonst keine Sau mehr versteht.
Versuch doch das auch mal im restlichen Alltag. face-wink

würde dir dann gern mehr infos schicken face-smile
Ja nee... eigentlich üben wir das im Forum ein bisschen, wie sich Fragen so vollständig formulieren lassen, dass das Problem verständlich ist.

Kann doch nicht sein, dass du zu obigem Problen nicht zwei, drei Beispielzeilen je Kasperdatei posten kannst...?

Verglichen mit dem, was bei den Liechtensteiner Banken oder der AOK im Papiermüll gefunden wird, ist doch dein pilpul nicht so furchtbar schützenswert, oder?

Grüße
Biber
[Edit nach dem Folgekommentar] @jiggyjones
Danke schön!
[/Edit nach dem Folgekommentar]
Member: jiggyjones
jiggyjones Jan 21, 2011 at 13:51:39 (UTC)
Goto Top
ok in der abrevation excel tabelle sieht es dann so aus:

Mixes mix
Backing bac
Intro & Outro ino
Intro itr
Outro out
Variation var
Acoustic Bass bsa
Electric Bass bse, bsl
Synth Bass bss
Sub Bass sub


Die Begriffe sind in zeile A die abkürzungen sind in zeile B
Wenn also ein begriff aus zeile B in dem ordner vor kommt sollte aus Zeile A das wort genommen werden und in eine txt datei direkt in dem source ordner erstellt werden...sprich

wir haben files mit dem namen:
01out123_hansolo....
dann soll das out ausgelesen werden und dementsprechend in einer txt datei mit dem begriff outro eingefügt werden<-- dann nur noch OUTRO also keine zahlen oder sonstiges..

die kürzel befinden sich immer nach den ersten beiden ziffern..sprich 01out oder 05bss oder 18sub usw...
insgesamt sind es 130 wörter die in der abrevation vorkommen...müsste also dann jeweils für jedes wort einen eintrag in der batch rein schreiben...
Member: jiggyjones
jiggyjones Jan 21, 2011 at 14:01:47 (UTC)
Goto Top
@echo off & setlocal
02.set "Ordner=D:\Der mit den paar Dateien" <-- kann man die zeile nicht ändern so das er immer den ordner nimmt wo ich die batch datei dann reinkopiere? dann müsste ich nicht ständig den ordner in der batch ändern...
Member: pieh-ejdsch
pieh-ejdsch Jan 21, 2011 at 14:23:18 (UTC)
Goto Top
müsste also dann jeweils für jedes wort einen eintrag in der batch rein schreiben...
das ist Tünnef!

Einen wunsch hätte ich da aber auch noch: Bearbeite Deine abrevation.txt
Mixes mix
wird zu:
Mixes:mix

Backing bac
wird zu:
Backing:bac

....usw

Electric Bass bse, bsl
wird zu:
Electric Bass:bse
Electric Bass:bsl

....usw
Achte aber auf Leerzeichen nach den 3 Buchstaben - darf keines mehr sein!
kann man die zeile nicht ändern
ist schon geschehen

PS. Über IM werde ich nicht machen! Hier wird gelernt und nicht beim Chatten!

Gruß Phil
Member: jiggyjones
jiggyjones Jan 21, 2011 at 14:30:11 (UTC)
Goto Top
Ok super phil, ich werd aus der abrevation.xls eine txt machen mit genau der formatierung die du mir da beschrieben hast..gib mir 5min...
Member: pieh-ejdsch
pieh-ejdsch Jan 21, 2011 at 14:37:47 (UTC)
Goto Top
*.xls kannst Du doch Exportieren und als Seperator den Doppelpunkt einstellen.

Gruß Phil
Member: jiggyjones
jiggyjones Jan 21, 2011 at 15:20:00 (UTC)
Goto Top
ok fertig, die txt datei steht..und nu ? face-smile
Member: pieh-ejdsch
pieh-ejdsch Jan 21, 2011 at 16:15:13 (UTC)
Goto Top
ja was nu...

das er immer den ordner nimmt wo ich die batch datei dann reinkopiere
wer macht denn sowas? Das ist doch viel zu umständlich! Da kann ich ja gleich den Ofen in den Wald schaffen, um es warm zu kriegen!
Hab ich oben nochmal verändert.

Du Brauchst nur den oder die Ordner per drag and drop auf die Batch absetzen.

schau mal die Zeile 02 und 03 der Batch an
set "Filterdatei=D:\abrevation.txt"

in was für einen Pfad ist denn die TXT? Genau diesen trägst Du in Zeile 02 hinter dem = (anstatt: D:\abrevation.txt ein. Die umschließenden Doppelten Hochkommata stehen lassen.
Zeile 03 steht für die AusgabeDatei - diese trägst Du auch mit Pfadangabe ein

Batch speichen unter: "Wie Du die auch immer nennen willst (ohne führende Ziffern).cmd"

Gruß Phil
Member: jiggyjones
jiggyjones Jan 21, 2011 at 16:18:24 (UTC)
Goto Top
ok hab verstanden nur das ding ist das ich ca. 2000 ordner habe wo jeweils immer die ausgabe txt rein kommen muss ..da machts doch mehr sinn immer die batch datei in den ordner zu kopieren und den patch ordner für ordner durchzuführen um dann jeweils eine separate ausgabe txt datei zu haben die ich später mit einem renamer tool easy renamen kann oder nicht?
Member: pieh-ejdsch
pieh-ejdsch Jan 21, 2011 at 16:21:12 (UTC)
Goto Top
ähm da fiel mir doch grad ein Du wolltest doch die Ausgabe Datei im Jeweiligen Ordner Haben.

Hol ich oben nach. Also keinen Pfad dazu angeben.

Gruß Phil
Member: jiggyjones
jiggyjones Jan 21, 2011 at 16:24:54 (UTC)
Goto Top
ok also muss ich die *.cmd datei erstellen und dann immer in die jeweiligen ordner kopieren? und dann lass ich die abrevation txt in einem verzeichniss und gebe das in der cmd an richtig ? macht sinn face-smile
Member: pieh-ejdsch
pieh-ejdsch Jan 21, 2011 at 16:26:22 (UTC)
Goto Top
Nein nicht in die Ordner kopieren! Zieh den Ordner auf die Batch! Es geht aber auch so.

wieso eigentlich mit einem renamer tool? wie soll denn die Datei heissen? wie der Ordner in dem sie steht?
Member: jiggyjones
jiggyjones Jan 21, 2011 at 16:31:54 (UTC)
Goto Top
Genau, die files müssen später oder halt durch deine göttlichen fähigkeiten^^ so erstellt werden das sie den ordner namen tragen...

was meinste mit " zieh den ordner auf die batch " ??
Member: Biber
Biber Jan 21, 2011 at 16:55:40 (UTC)
Goto Top
Moin jiggyjones,


Zitat von @jiggyjones:
was meinste mit " zieh den ordner auf die batch " ??
Apropos "es zieht sich"....

Du kannst
a) von dem CMD-Prompt aus die Batchdatei starten und den vollen Pfadnamen als Parameter mit angeben
-oder-
b) in Windows-Explorer (s. Windows-Hilfe) den Ordner (s. Leitz) mit der Maus (s. Brehms Tierleben) markieren und auf die Batchdatei ziehen.

a) ist der Weg beim Testen, b) ist (wahrscheinlich) der Weg, wenn du es täglich benutzt ohne weiter drüber nachzudenken.

Bekommen wir noch so einen brechbohnenfarbenen Haken dran vor dem Wochenende?

Grüße
Biber
Member: jiggyjones
jiggyjones Jan 21, 2011 at 17:02:26 (UTC)
Goto Top
Ich bin euch so dankbar, ich muss es am Montag testen...vielen dank schonmal im vorraus und ein wunderschönes wochenende euch allen

und ps:
ich benutze meist immer den weg A wusste nicht das man über den explorer über drag and drop solche prozesse ansteuern kann face-smile

bis montag
Member: pieh-ejdsch
pieh-ejdsch Jan 21, 2011 at 18:51:09 (UTC)
Goto Top
war grad einen schwofen,

ich hab grad nochmal oben die Namensgebung umgebaut.
wenn das eine TXT Datei werden soll musst Du noch .txt in Zeile 05 vor dem letzten doppelten Hochkomma " einfügen.

Du kannst auch alle Ordner Markieren mit "gedrückter Maus drübergehen" oder einzeln mit Gedrückem "strg" und "Klick"/"Space" und den ganzen Ramsch per "drag and drop" auf die Batch ziehen.

Ps. wennDu beim Code auf Quelltext klickst hast Du den Code zum "drag and drop" in die Batch, aber das hast Du ja schon gemacht.

Gruß Phil
Member: jiggyjones
jiggyjones Jan 24, 2011 at 09:35:32 (UTC)
Goto Top
Guten Morgen Phil,

also es klappt irgendwie nicht, ich habe in der Batch den Quellpfad der abbrevation.tx geändert und wenn ich dann halt einen ordner drauf ziehe der die besagten files hat dann erscheint kurzzeitig ein kleines dos fenster was man garnicht lesen kann und danach erscheint eine bin datei im quellpfad der abbrevation die aber auch nach umwandlung in einer txt datei nicht zu lesen ist..woran kann es liegen? Ich habe per drag und drop einfach den einen ordner namens busy mess125 e auf die cmd geschoben

hier die cmd datei:
@echo off & setlocal
set "Filterdatei=F:\abbrevation.txt"
:begin
if "%~1" == "" (pushD "%~dp0") else pushD "%~1"
for %%i in ("%cd%") do set "Ausgabe=%%~nxi"
(
for %%i in (*) do for /f "tokens=* delims=1234567890" %%j in ("%~ni") do if not "%~ni" == "%j" (
set "Name=%%j"
setlocal enabledelayedexpansion
for %%k in ("!Name:~0,3!") do (
endlocal
for /f "usebackq tokens=1,2 delims=:" %%l in ("%Filterdatei%") do if "%%m" == "%%~k" do echo %%l
) )
)>"%Ausgabe%"
popD
if not "%~2" == "" shift & goto :begin
Member: jiggyjones
jiggyjones Jan 24, 2011 at 09:36:55 (UTC)
Goto Top
wenn ich die MediaID.bin in eine txt Datei umbenenne sehe ich diesen Inhalt:
l›\RÓqH…áÊ:¸4­
Member: pieh-ejdsch
pieh-ejdsch Jan 24, 2011 at 09:53:59 (UTC)
Goto Top
moin jiggyjones,

diese Media.bin hat nichts mit der Batch zu tun. Diese wird nur vom System (eventuell temporär) erstellt. Bibliotheken-krams etc.

wo sollen denn nun eigentlich die Ordnername-Tetxdateien hin? Denn hier:
... nur das ding ist das ich ca. 2000 ordner habe wo jeweils immer die ausgabe txt rein kommen muss

Gruß Phil
Member: jiggyjones
jiggyjones Jan 24, 2011 at 09:59:17 (UTC)
Goto Top
Ja das ist ja immer verschieden, hab soviele Daten die ich da durchjagen müsste..kann man nicht eine zeile reinschreiben das er automatisch die text datei dahin kopieren soll wo ich den ordner auch habe? also direkt dahin wo die wave files sind die ausgelesen werden müssen ? wenn nicht reicht es auch das sie an den ort der abbrevation sprich f:\ kommen und ich sie dann halt manuell in den ordner schiebe wo sie hin gehören...

das mit dem txt in zeile 5 eintragen hat ja auch irgendwie nicht geklappt..
Member: pieh-ejdsch
pieh-ejdsch Jan 24, 2011 at 10:22:42 (UTC)
Goto Top
ääähhm,
na sowas. Da waren noch ein paar Prozente zu wenig und ein do zuviel. Ist Berichtigt.

Jetzt kannste aber loslegen.

Gruß Phil
Member: jiggyjones
jiggyjones Jan 24, 2011 at 10:47:48 (UTC)
Goto Top
Sehr geil, es funktioniert

2 sachen noch face-smile

kannste das so umschreiben das wenn drums vorkommen die dann auch nur einmal in die txt datei geschrieben werden? also if einer dieser drum einträge vorhanden dann einmal DRUM sonst siehts nämlich so aus:

Mixes
Drums
Drums
Drums
Sub Bass
Drums
Drums
Shaker
Percussion
FX Electronic FX
FX Electronic F

Das selbe eigentlich für alle anderen Einträge..sprich..wenn einer 2mal vorkommt reicht ein eintrag siehe FX Electronic FX und Drums

und können wir das tempo der files jetzt auch kategorisieren? das tempo ist immer an 6ter bis 9ter stelle und müsste in diese kategorien:
1. Slow 000 –070 BPM
2. Mid Tempo 071 – 110 BPM
3. Uptempo 111 – 180 BPM
und diese info dann in eine neue file? tempo txt? oder gäbe es ne möglichkeit batch mäßig sowas in eine xls tabelle eintragen zu lassen? naja txt würde auch gehen würde es dann umtragen
Member: jiggyjones
jiggyjones Jan 24, 2011 at 10:52:04 (UTC)
Goto Top
und können wir die einträge in der txt datei so formatieren das sie nur mit kommas getrennt sind und nicht untereinander?

ich bin fasziniert und dir so dankbar phil face-smile
Mixes
Drums
Drums
Drums
Sub Bass
Drums
Drums
Shaker
Percussion
FX Electronic FX
FX Electronic F
würde dann zu:
Mixes,Drums,Sub Bass,Shaker,Percussion,FX Electronic FX

gruß jiggy
Member: pieh-ejdsch
pieh-ejdsch Jan 24, 2011 at 11:38:04 (UTC)
Goto Top
das mit der Seperierten Zeile wird kein Problem sein aber bevor ich noch zehnmal die Batch ändere:

  1. mit dem Tempo - woraus werden diese Informationen gelesen (6. - 9. Stelle wovon?) und wie sieht ein vollständiger String aus? Langsam sind wir an dem Punkt wo Eindeutige, Beispielhafte, Richtige Informationen von Beginn an - schon weitergeführt hätten.
  2. statt einer xls kann auch eine csv mit Semikiola etc. erstellt werden. Dazu werden aber infos über die Formatierung (Zeile; Spalte) gut.

Gruß Phil
Member: jiggyjones
jiggyjones Jan 24, 2011 at 11:51:45 (UTC)
Goto Top
also die filenamen sehen so aus:
01mix123_blablabla.wav

01mix123 oder
02bde221 immer genau hinter der instrumenten angabe findet sich die geschwindigkeit in 3 stelliger zahlenangabe wieder

sprich 01mis123 ist 123bpm schnell oder bde221 ist 221bpm schnell


also 6te bis 8te stelle bezieht sich auf das tempo

Csv Dateien kenne ich nicht was genau brauchst du da dann für infos? Falls es ähnlich wie excel ist wäre es cool wenn in zeile A der name des ordners wo die files sich befinden vorkommt dann in zeile B die ausgeschriebenen instrumente und in zeile C dann die tempo kategorie sprich: A: songname B: Drums,Shaker,Percussion C: Slow

kann ich die CSV dann in eine excel liste umwandeln? denke schon oder?

und sorry wegen den fehlenden anfangs infos..das hat sich ebend erst aus dem prozess ergeben my friend face-smile
Member: pieh-ejdsch
pieh-ejdsch Jan 24, 2011 at 12:07:37 (UTC)
Goto Top
eine csv kannst Du Problemlos in eine ExcelListe Umwandeln bzw gleich öffnen.

in Excel sind A;B;C... die Spalten und 1;2;3 die Zeilen was meinst Du nun genau?
  1. Also Spalte 1 fürs 1.File; Spalte 2 fürs 2.File; Spalte 3 für das 3. File usw oder
  2. Zeile 1 für File1, Zeile 2 für File2 ...usw

ich denke mal 2.
Member: jiggyjones
jiggyjones Jan 24, 2011 at 12:39:53 (UTC)
Goto Top
also so:

A ------------------- ------------------ B ---------------------------- --------------------- C
1Foldername ------------------ Drums,Percussion, etc ------------ Slow oder Mid Tempo oder Uptempo
2Foldername ------------------ Drums,Percussion, etc ------------ Slow oder Mid Tempo oder Uptempo
3Foldername ------------------ Drums,Percussion, etc ------------ Slow oder Mid Tempo oder Uptempo
Member: jiggyjones
jiggyjones Jan 24, 2011 at 14:20:30 (UTC)
Goto Top
kriegt man das hin ?
konnte ich es dir damit irgendwie verständlich machen? falls nein dann frag bitte face-smile sorry wegen den umständen phil face-smile
Member: jiggyjones
jiggyjones Jan 24, 2011 at 15:13:58 (UTC)
Goto Top
Hallo bist du noch da? face-sad

verlange ich jetzt zuviel oder biste einfach nur beschäftigt phil ?
Member: pieh-ejdsch
pieh-ejdsch Jan 24, 2011 at 15:21:55 (UTC)
Goto Top
Geduld, Gelduld ...
mach mal keine Hektik ich hab doch auch ein bissel getestet.
wenn des jetzt so gut ist, dann gut.
wenn nicht, dann sag was anders gemacht werden soll.

Gruß Phil
Member: jiggyjones
jiggyjones Jan 24, 2011 at 15:46:19 (UTC)
Goto Top
Super Phil,

wir kommen der Sache näher..bin begeistert..also:
In Spalte A sollte nur der Foldername stehen und nicht die ganzen datei Namen...pro Ordner nur eine Zeile und in Spalte B sollten innerhalb einer Zeile alle ausgelesenen Drum infos in die Zeile rein...Spalte C ist korrekt...hier ein Beispiel :

A ------------------- ------------------ B ---------------------------- -------------- C
1hansolo ------------------ Drums,Percussion, Strings ------------ Slow <--infos des ersten ordners
2Jiggyjones ------------------ Percussion, Bass, Piano ------------ Mid Tempo <------------infos des 2ten ordners
3Sunshine ------------------ Gitarre,Bass,Drums------------ Uptempo <---------infos des dritten ordners
usw..

und bitte ist es möglich doppelte einträge zu vermeiden? so das nicht in spalte B dreimal in zeile 1 Drums steht? also wenn 2mal Drums in dem Ordner vorkommen reicht ein Drum eintrag völlig, das selbe mit all anderen doppelten einträgen..sprich wenn im ordner 2mal piano vorkommt reicht es wenn in spalte B einmal piano steht

gruß jiggy ♥
Member: pieh-ejdsch
pieh-ejdsch Jan 24, 2011 at 18:47:35 (UTC)
Goto Top
so das war ja ne schwere Geburt!

der hat mir die Variable NICHT Per !Variable! trotzt delayedexpansion in der Forschleife aufgelöst - der Inhalt fehlte immer nur der Name stand!. Liegt warscheinlich daran, dass es eine Folge-Folge-Folge-Forschleife innerhalb der Schleife gewesen ist. Das ganze geht nur mit "set Variable" aufzulösen. solche komischen Eigenheiten der CMD ist ja echt ...naja.

so Probier mal, ob das jetzt so passt.

Gruß Phil
Member: jiggyjones
jiggyjones Jan 26, 2011 at 10:37:14 (UTC)
Goto Top
werds später mal testen..bin grad bizzy..bin gespannt face-smile
Member: jiggyjones
jiggyjones Jan 26, 2011 at 15:17:34 (UTC)
Goto Top
Hey Phil,

hab es grade ausprobiert und es geht nicht, es öffnet sich das DOS fenster und nach kurzer zeit kommt 100mal untereinander die Meldung:
"Maximale Rekursionstiefe für SetLocal erreicht"

Nach dem Vorgang finde ich keine csv datei...irgendwo is der Wurm drinn face-sad

*edit* Wenn ich nur einen Ordner mit ca. 10 Files drauf ziehe erscheint die Fehlermeldung nicht aber auch da wird keine CSV angelegt..
Member: pieh-ejdsch
pieh-ejdsch Jan 26, 2011 at 15:59:37 (UTC)
Goto Top
moin jiggyjones,
ich hatte nicht mit sovielen Ordnern/Dateien getestet.
ich hab das endlocal nochmal verschoben.

Geht es denn jetzt? Die csv sollte aber dann dort sein wie bei Ausgabe angegeben.
Member: jiggyjones
jiggyjones Jan 26, 2011 at 16:24:46 (UTC)
Goto Top
Ne irgendwie nicht..die csv datei wird zwar erstellt aber in der csv datei sind keine richtigen einträge da sondern nur:

Wow 125 e;Drums Percussion Effects;Uptempo


Bei der alten version hat es doch schon damit geklappt..ich verstehs net face-sad
Member: pieh-ejdsch
pieh-ejdsch Jan 26, 2011 at 17:29:43 (UTC)
Goto Top
da hatte ichs nur mit einem Ordner getestet gehabt.
jetzt getestet mit 263 Orndern je 11 zutreffenden Dateien (gesamt 2893 Dateien)
ich hab die Fehlende Klammer drumrum gemacht nun wird die csv mit allen übergebenen Ordnern Erstellt.
wenn die vielen Ordner in einem bestimmten Ornder sind könnte man diesen doch als HauptQuelle für die vielen Ordner nehmen müsste nur der Batch leicht am anfang umgeschrieben werden.

Gruß Phil
Member: jiggyjones
jiggyjones Jan 27, 2011 at 09:51:08 (UTC)
Goto Top
Achso das erklärt einiges....also jetzt funktioniert es auch bei mir..hab 10 ordner reingehauen und es geht

face-smile

vielen dank phil face-smile

werd es jetzt bei gelegenheit mal komplett ausreizen...

Die Hauptquelle müssen wir nicht angeben da vielleicht später noch weitere ordner dazu kommen würden und naja mit dem drag&drop verfahren man eigentlich ganz gut ans ziel kommt face-smile
Member: pieh-ejdsch
pieh-ejdsch Jan 27, 2011 at 10:32:27 (UTC)
Goto Top
moin jiggyjones,

jetzt hast Du aber bestimmt noch Probleme wenn Du mehr als 300 Ordner auf die Batch ziehst - bei mir hat es gleich am Anfang abgebrochen.
eventuell ist Die Befehlszeile für die Batchausführung dann zu lang. Maximal 8.191 Zeichen lang darf nur die Befehlszeile sein, welche die Batch ausführt.
Du hast ja ca. 2000 Ordner - daher der Vorschlag mit dem Hauptverzeichnis.

das nächste wäre:
wenn schon "Intro & Outro" gefunden wurden werden "Intro" und "Outro" NICHT mehr zur gleichen Zeile hinzugefügt.

Diese Sachen könnte ich noch fixen.

Gruß Phil
Member: jiggyjones
jiggyjones Jan 27, 2011 at 10:37:06 (UTC)
Goto Top
Ja das wäre klasse ... face-smile
Member: pieh-ejdsch
pieh-ejdsch Jan 27, 2011 at 19:06:50 (UTC)
Goto Top
Du müsstest Deine Abrevation.txt aber wieder bearbeiten
zumindest müsstest Du alle Geichen Voreinträge zu einem zusammenziehen:
Electric Bass:bse, bsl
Die Leerzeichen nach dem Doppelpunkt interessieren jetzt nicht mehr, ausser Du hast Drei oder mehr Einträge.
Da musst Du ab den zweiten Eintrag anstatt des Komma ein Leerzeichen Verwenden zB.
Electric Bass bse, bsl bsc bsf


Ach so ein Käse!

Ich hab Dir gleich die entspechende Routine eingebaut, welche die "Abrevation.txt" selbständig ganz neu Überarbeitet und alle Doppelten Einträge Entfernt.
wenn Du eine neue Drum oder sonstwas Zeile dazuschreibst (nach dem Doppelpunkt getrennt mit Leerzeichen oder Komma wird es automatisch in die passende Zeile Eingefügt und doppelungen entfernt.
Eine Statusmeldung für den Ordner,welcher grad Durchgenommen wird bekommst Du Ausserdem.
Es dauert nämlich ganz schön lange. Ich hab das ganze mit 676 Ordnern von AA - ZZ getestet. ca 2,5 Stunden (aber bei den vielen Ordnern mit dem Hauptordner)
Abbruch ist möglich mit [strg]+[c] und nachher [j]


@echo off & setlocal
:: Anzupassende Variablen
:: Hauptordner=Hier kommt der Komplette Pfad des Ordners hin, welcher die vielen Ordner beinhaltet.
:: Filterdatei=Hier kommt der komplette Pfad  der abrevations - Filter - Datei hinein
:: Ausgabe=Hier kommt der komplette Pfad der Ausgabe csv Datei rein
set "HauptOrdner=D:\Cmd befehle\Abrevtest"  
set "Filterdatei=D:\abrevation.txt"  
set "Ausgabe=D:\Percusions.csv"  
set "TempoS=1-70:slow"  
set "TempoM=71-110:Mid Tempo"  
set "TempoF=111-180:Uptempo"  
if "%~1" == "" echo Syntaxfehler! & goto :eof  
if "%~1" == "/?" (echo Syntax:&echo.  
echo %~n0 Ordner1 [Ordner2 ...]
echo                 Die Datei "%Ausgabe%" wird fortgesetzt und  
echo                  einzelne Zeilen erneuert. Wobei die Aeltere Zeile ersetzt wird.
echo.
echo %~n0 "%Hauptordner%"  
echo                Die Datei "%Ausgabe%" wird geloescht und  
echo                 komplett neu geschrieben.
goto :eof
)

if /i not  "%~1" == "%Hauptordner%" (set "Alle="  
set "Raus=findstr /v /b "%%k;.*;%%l" "%Ausgabe%" "  
set "Trennen=|sort"  
goto :begin
)
type nul >"%Ausgabe%"  
set "Alle=\*"  

:begin
set "Hauptordner=%~1"  
setlocal enabledelayedexpansion
for /f "usebackq tokens=1,2 delims=:" %%i in ("%Filterdatei%") do for %%k in (%%j) do echo "!..%%i!"|findstr "%%k" >nul || set "..%%i=!..%%i!%%k "  
(
for /f "tokens=1,2 delims=.=" %%i in ('set ..') do echo %%i: %%j  
)>"%temp%\tmp"  
type "%temp%\tmp">"%Filterdatei%"  
(
for /d %%h in ("%Hauptordner%%Alle%") do (  
	echo Durchsuche %%~nxh
	set "Ordner="  
	for %%i in ("%%~h\*") do for /f "tokens=* delims=1234567890" %%j in ("%%~ni") do if not "%%~ni" == "%%j" (  
		set "Name=%%j"  
		for /f "tokens=* delims=0" %%k in ("!Name:~3,3!:!Name:~0,3!;!Ordner!") do set "Ordner=%%k"  
	)
	for /f "usebackq tokens=1* delims=:" %%i in ("%Filterdatei%") do for %%w in (!Ordner!) do for /f "tokens=1,2 delims=:" %%l in ("%%~w") do echo "%%m"|findstr "%%j" >nul && (  
		for %%o in ("%tempoS%" "%tempoM%" "%tempoF%") do for /f "tokens=1,2* delims=-:" %%p in ("%%~o") do if %%p leq %%l if %%q geq %%l (  
			for %%u in ("::%%~nxh:%%r") do (  
				if defined %%~u (
					for /f "tokens=1* delims==" %%s in ('set "Vergleich:%%r"') do (  
						echo "%%~t"|find "%%m" >nul || (set "Vergleich:%%r=%%~t,%%j"  
							for /f "tokens=1* delims==" %%u in ('set "::%%~nxh:%%r"') do set "::%%~nxh:%%r=%%~v,%%i"  
					)	)
				) else (set "Vergleich:%%r=%%j"&set "::%%~nxh:%%r=%%i")  
	)	)	)
	for /f "tokens=1,2,3 delims=:=" %%k in ('set :: 2^>nul') do (  
		echo %%k;%%m;%%l
		set "::%%k:%%l="  
		set "Vergleich:%%l="  
	)>&3
	
)
) 3>>"%Ausgabe%"  
endlocal
if not "%~2" == "" shift & goto :begin  
if defined alle goto :eof
setlocal enabledelayedexpansion
move "%Ausgabe%" "%temp%\tmp" >nul  
::@echo on
for /f "usebackq tokens=1-3 delims=;" %%i in ("%temp%\tmp") do (  
	for /f "tokens=* delims=:" %%m in ('findstr /b "%%i;.*;%%k" "%temp%\tmp"') do set "Line=%%m"  
	set "Opt="  
	findstr /b "%%i;.*;%%k" "%Ausgabe%" >nul 2>nul || set "Opt=1"  
	if defined Opt echo !Line!>>"%Ausgabe%"  
)

[Edit] code nochmals überarbeitet siehe nächsten komment [/Edit]
Gruß Phil
Member: jiggyjones
jiggyjones Jan 28, 2011 at 10:35:40 (UTC)
Goto Top
Irgendwie gehts jetzt garnicht mehr..ich ziehe 10 ordner auf die Batch und er erstellt mir eine leere csv datei

was hat es set "HauptOrdner=D:\Cmd befehle\Abrevtest" auf sich?
Member: pieh-ejdsch
pieh-ejdsch Jan 28, 2011 at 19:19:53 (UTC)
Goto Top
moin jiggyjones,

Ich hab Dir den Code nochmals Überarbeitet.
Irgendwie gehts jetzt garnicht mehr..ich ziehe 10 ordner auf die Batch und er erstellt mir eine leere csv datei
Ich denke ich habe die Zeilen in den Batch so geschrieben, dass Du es auch Verstehst - dass zum Eintragen.
Wenn Du einen oder mehrere Ordner (die vielen passenden mit den enthaltenen Dateien) auf die Batch Ziehst wird die CSV nur nachbearbeitet.
Die Funktion macht Dir automatisch ein Update in der CSV und Trägt die Passende Zeile als neueste Zeile in die entsprechende Spalte ein. Also auch richtig sortiert.
Neue Einträge werden neu eingetragen aber nicht neu sortiert sondern nur angehangen.
könntest Du allerdings mit:
move "%Ausgabe%" "%temp%\tmp" >nul &sort < "%temp%\tmp" > "%Ausgabe%"
im Batch ganz unten drangehangen nachholen.

was hat es set "HauptOrdner=D:\Cmd befehle\Abrevtest" auf sich?
Das ist das andere Feature (was ich schon vohin drinhatte)
Dort gibst Du den Kompeltten Pfad des Ordners an, in welchen die vielen Ordner stecken die Du sonst Händisch auf die Batch ziehst.
Wenn Du dann den HauptOrdner auf die Batch ziehst, werden alle enthaltenen Ordner durchgeprüft und die CSV wird Komplett neu geschrieben.

als drittes ist eine kleine Hilfe (Aufruf mit /? ) eingebaut.

der Batch macht nichts OHNE Parameter (wenn Du nur so Draufklickst)

Gruß Phil
Member: jiggyjones
jiggyjones Feb 10, 2011 at 15:46:01 (UTC)
Goto Top
Also ich hab am ende immer eine leere CSV ausgaben Datei

ich muss auch zugeben das sich die formatierung unserer files sich geändert hat vielleicht liegt es daran ?

die files sind jetzt so aufgebaut:
vorher:
123gln_edumaze.wav
jetzt:
1_02gte086_SP muscle huzzel_intro_e.wav

also hat sich der für uns relevante eintrag um ein paar zeilen verschoben, liegt es daran?

Innerhalb des Batch vorgangs kommt auch die meldung das er die richtigen ordner durchsucht..es kommt dann im dos fenster die meldung:
durchsuche folder 1
durchsuche folder 2
durchsuche folder 3
durchsuche folder 4
usw..

Aber die CSV ist danach leer.. face-sad Obwohl ich die richtigen Pfade für die abbrevation etc gegeben hab

noch eine frage, durchsucht er auch die unterordner? oder nur die inhalte der folder 1 bis 99 etc.. ?

sorry das es so lange gedauert hat aber konnte mich bisher noch nicht mit der thematik befassen..

grüße jiggy
Member: pieh-ejdsch
pieh-ejdsch Feb 10, 2011 at 16:26:25 (UTC)
Goto Top
moin jiggyjones,

wenn die Files eine Zahl und einen Unterstrich vorangesetzt bekommen haben
füge in der Zeile 44.
	for %%i in ("%%~h\*") do for /f "tokens=* delims=1234567890" %%j in ("%%~ni") do if not "%%~ni" == "%%j" (
zwischen die 0 (Null) und dem " (Anführungszeichen) den Unterstrich ein.

noch eine frage, durchsucht er auch die unterordner? oder nur die inhalte der folder 1 bis 99 etc.. ?
der Batch Durchsucht nur die Unterordner des Hauptordners oder die per Parameter angegebenen Ordner.

bei einer Rekursion müsste ich schon wissen wie die Entsprechende Zeile in der CSV geschrieben werden soll (mit oder Ohne den Ordner vorangestellt, wo die anderen tieferen Ordner enthalten sind. Sprich mit relativer Pfadangabe.)

Gruß Phil
Member: jiggyjones
jiggyjones Feb 10, 2011 at 16:30:43 (UTC)
Goto Top
Phil,

es muss tatsächlich an der neuen formatierung der filenamen liegen denn ich habe den batch nochmal mit den alten files probiert und dort hat es gleich funktioniert...

es wäre echt toll wenn der batch auch die unterverzeichnisse checkt denn die files sind ungefähr in einer solchen ordner struktur:

Z:\Musik\
dort dann 2000 folder mit verschiedenen namen
zb.
Z:\Musik\Hiphop\

und im hip hop ordner dann die song namen
zb:
Z:Musik\hiphop\coolthang
Z:Musik\hiphop\masterP
Z:Musik\hiphop\bowwow
und dann:
in den jeweiligen ordnern:


Z:Musik\hiphop\coolthang\1\
Z:Musik\hiphop\coolthang\2\
Z:Musik\hiphop\coolthang\3\
Z:Musik\hiphop\coolthang\4\

Z:Musik\hiphop\masterP\1\
Z:Musik\hiphop\masterP\2\
Z:Musik\hiphop\masterP\3\
Z:Musik\hiphop\masterP\4\

und in 1234 sind halt die wav files drinn..ich weiss nicht ob du das so schon eingerichtet hast da die neu formatierten (neuen namen) files in diesen ordnern hängen und somit ich ja auch keinen CSV eintrag bekomme...

grüße
Jiggy
Member: jiggyjones
jiggyjones Feb 10, 2011 at 16:54:34 (UTC)
Goto Top
bei einer Rekursion müsste ich schon wissen wie die Entsprechende Zeile in der CSV geschrieben werden soll (mit oder Ohne den Ordner vorangestellt, wo die anderen tieferen Ordner enthalten sind. Sprich mit relativer Pfadangabe.) <-

Wichtig ist nur der name des songs und die files...und die ordner struktur ist so :

\\.Produktname..\NAME\1\files.wav
\\...\NAME\2\files.wav
\\...\NAME\3\files.wav
\\...\NAME\4\files.wav
\\...\NAME\5\files.wav

\\.Produktname..\andererNAME\1\files.wav
\\...\andererNAME\2\files.wav
\\...\andererNAME\3\files.wav
\\...\andererNAME\4\files.wav
\\...\andererNAME\5\files.wav
name und files sind relevant

und bei:
for %%i in ("%%~h\*") do for /f "tokens=* delims=1234567890" %%j in ("%%~ni") do if not "%%~ni" == "%%j" (

zwischen die 0 (Null) und dem " (Anführungszeichen) den Unterstrich ein.

so?:
for %%i in ("%%~h\*") do for /f "tokens=* delims=1234567890_" %%j in ("%%~ni") do if not "%%~ni" == "%%j" (
Member: pieh-ejdsch
pieh-ejdsch Feb 10, 2011 at 17:14:56 (UTC)
Goto Top
und was genau soll in die erste Spalte Eingetragen werden?

der ganze Pfad? Oder der Relative Pfad zu welchen Ordner?

wann soll eine neue Zeile Begonnen werden?
vom Ordner "1" zu Ordner "2" oder vom Ordner "cooltang" zum Ordner "masterP" ?

[Edit] seh grad die zweite Antwort. Erübrigt sich also. [/Edit]

Gruß Phil
Member: pieh-ejdsch
pieh-ejdsch Feb 10, 2011 at 17:21:56 (UTC)
Goto Top
das mit dem Unterstrich: Ja richtig, aber da Du Unterordner hast muss ich das ganze nochmal modifizieren.
Member: pieh-ejdsch
pieh-ejdsch Feb 10, 2011 at 22:38:47 (UTC)
Goto Top
wenn Z:\Musik Dein Hauptordner ist:

anstatt der Zeile 41
for /d %%h in ("%Hauptordner%%Alle%") do (
schreibst Du diese Zeile
for /d %%A in ("%Hauptordner%%Alle%") do for /d %%B in ("%%A\*") do for /d %%h in ("%%B\*") do (

und die Zeile 44
	for %%i in ("%%~h\*") do for /f "tokens=* delims=1234567890_" %%j in ("%%~ni") do if not "%%~ni" == "%%j" (
machst Du zu dieser
	for /r %%i in ("%%~h\*.wav") do for /f "tokens=* delims=1234567890_" %%j in ("%%~ni") do if not "%%~ni" == "%%j" (

das sollte eingentlich genügen und die Einzelordner zum Draufziehen sind dann die im Verzeichnis "Z:Musik" sind.

Gruß Phil
Member: jiggyjones
jiggyjones Feb 11, 2011 at 10:01:16 (UTC)
Goto Top
Es funktioniert einfach nicht :/

Verzeichniss:
Z:\Neue Server Struktur - Ordner 3.1.2011
in diesem Ordner sind ca. 80 folder die dann in derem folder nochmals folder haben mit 1 2 3 4 5 6 und da sind die waves drinn...

Wenn ich einen dieser ordner einfach aufs Z: verschiebe und versuche da auszuführen geht es auch nicht...


@echo off & setlocal
:: Anzupassende Variablen
:: Hauptordner=Hier kommt der Komplette Pfad des Ordners hin, welcher die vielen Ordner beinhaltet.
:: Filterdatei=Hier kommt der komplette Pfad der abrevations - Filter - Datei hinein
:: Ausgabe=Hier kommt der komplette Pfad der Ausgabe csv Datei rein
set "HauptOrdner=Z:\5069-0001_Breaking_Dawn"
set "Filterdatei=Z:\Batch\abbrevation2.txt"
set "Ausgabe=Z:\neuErgebnistest.csv"
set "TempoS=1-70:slow"
set "TempoM=71-110:Mid Tempo"
set "TempoF=111-180:Uptempo"
if "%~1" == "" echo Syntaxfehler! & goto :eof
if "%~1" == "/?" (echo Syntax:&echo.
echo %~n0 Ordner1 [Ordner2 ...]
echo Die Datei "%Ausgabe%" wird fortgesetzt und
echo einzelne Zeilen erneuert. Wobei die Aeltere Zeile ersetzt wird.
echo.
echo %~n0 "%Hauptordner%"
echo Die Datei "%Ausgabe%" wird geloescht und
echo komplett neu geschrieben.
goto :eof
)

if /i not "%~1" == "%Hauptordner%" (set "Alle="
set "Raus=findstr /v /b "%%k;.*;%%l" "%Ausgabe%" "
set "Trennen=|sort"
goto :begin
)
type nul >"%Ausgabe%"
set "Alle=\*"

:begin
set "Hauptordner=%~1"
setlocal enabledelayedexpansion
(
for /f "tokens=1,2 delims=.=" %%i in ('set ..') do echo %%i: %%j
)>"%temp%\tmp"
type "%temp%\tmp">"%Filterdatei%"
(
for /d %%A in ("%Hauptordner%%Alle%") do for /d %%B in ("%%A\*") do for /d %%h in ("%%B\*") do (
echo Durchsuche %%~nxh
set "Ordner="
for /r %%i in ("%%~h\*.wav") do for /f "tokens=* delims=1234567890_" %%j in ("%%~ni") do if not "%%~ni" == "%%j" (
set "Name=%%j"
for /f "tokens=* delims=0" %%k in ("!Name:~3,3!:!Name:~0,3!;!Ordner!") do set "Ordner=%%k"
)
for /f "usebackq tokens=1* delims=:" %%i in ("%Filterdatei%") do for %%w in (!Ordner!) do for /f "tokens=1,2 delims=:" %%l in ("%%~w") do echo "%%m"|findstr "%%j" >nul && (
for %%o in ("%tempoS%" "%tempoM%" "%tempoF%") do for /f "tokens=1,2* delims=-:" %%p in ("%%~o") do if %%p leq %%l if %%q geq %%l (
for %%u in ("::%%~nxh:%%r") do (
if defined %%~u (
for /f "tokens=1* delims==" %%s in ('set "Vergleich:%%r"') do (
for /f "tokens=1* delims==" %%u in ('set "::%%~nxh:%%r"') do set "::%%~nxh:%%r=%%~v,%%i"
) )
) else (set "Vergleich:%%r=%%j"&set "::%%~nxh:%%r=%%i")
) ) )
for /f "tokens=1,2,3 delims=:=" %%k in ('set :: 2^>nul') do (
echo %%k;%%m;%%l
set "::%%k:%%l="
set "Vergleich:%%l="
)>&3

)
) 3>>"%Ausgabe%"
endlocal
if not "%~2" == "" shift & goto :begin
if defined alle goto :eof
setlocal enabledelayedexpansion
move "%Ausgabe%" "%temp%\tmp" >nul
::@echo on
for /f "usebackq tokens=1-3 delims=;" %%i in ("%temp%\tmp") do (
for /f "tokens=* delims=:" %%m in ('findstr /b "%%i;.*;%%k" "%temp%\tmp"') do set "Line=%%m"
set "Opt="
if defined Opt echo !Line!>>"%Ausgabe%"
)
Member: pieh-ejdsch
pieh-ejdsch Feb 11, 2011 at 10:57:49 (UTC)
Goto Top
feuere mal diese Zeile vom Promt ab
dir /s /b Z:\*.wav>"%temp%\Dir"&echo.&&@for /f "delims=:" %j in ('findstr /n "^" "%temp%\Dir" ^|find /c ":"') do @for /f %k in ('set /a "Lines=%j-5"') do @if %k gtr 0 @(more +%k "%temp%\Dir") else type "%temp%\Dir"  
und gib die 5 Zeilen hier Rein

Gruß Phil
Member: jiggyjones
jiggyjones Feb 11, 2011 at 10:59:51 (UTC)
Goto Top
Wie bitte? Was meinst du damit?
Member: pieh-ejdsch
pieh-ejdsch Feb 11, 2011 at 11:24:05 (UTC)
Goto Top
Du kopierst diesen Text mit in den Speicher kopieren in Deine Zwischenablage und Fügst das in ein CMD Fenster ein. Das Ergebnis postest Du hier (es geht um die genaue Ordnerstruktur).

dir /s /b z:\*.wav>"%temp%\Dir"&echo.&&@for /f "delims=:" %j in ('findstr /n "^" "%temp%\Dir" ^|find /c ":"') do @for /f %k in ('set /a "Lines=%j-5"') do @(if %k gtr 0 @(more +%k "%temp%\Dir">"%userprofile%\Desktop\5-Zeilen.txt") else move /y"%temp%\Dir" "%userprofile%\Desktop\5-Zeilen.txt">nul)&&"%userprofile%\Desktop\5-Zeilen.txt"&&ping -n 1 localhost >nul&del "%userprofile%\Desktop\5-Zeilen.txt"  

Gruß Phil
Member: jiggyjones
jiggyjones Feb 11, 2011 at 11:38:59 (UTC)
Goto Top
Der zeigt mir 5 waves von einem anderen ordner an die auf der platte sind

hier sind die richtigen files:

Z:\Neue Server Struktur - Ordner 3.1.2011\5069_jiggy_Pop\5069-0001_Breaking_Dawn\1
Z:\Neue Server Struktur - Ordner 3.1.2011\5069_jiggy_Pop\5069-0002_Butterflies\1
Z:\Neue Server Struktur - Ordner 3.1.2011\5069_jiggy_Pop\5069-0003_Dry_Up_Your_Tears\3
Z:\Neue Server Struktur - Ordner 3.1.2011\5069_jiggy_Pop\5069-0004_Early_Morning\2
Z:\Neue Server Struktur - Ordner 3.1.2011\5069_jiggy_Pop\5069-0005_Feeling_You\3

Jiggy wurde von mir ersetzt...jiggy pop ist das produkt es gibt also auch zb:

Z:\Neue Server Struktur - Ordner 3.1.2011\5076_hardcore_Ballads\5076-0008_Life_Is_Nothing\2
Z:\Neue Server Struktur - Ordner 3.1.2011\5076_hardcore_Ballads\5076-0010_Not_Ashamed\2
Z:\Neue Server Struktur - Ordner 3.1.2011\5076_hardcore_Ballads\5076-0012_Playas_Get_Lonely_Too\3
Z:\Neue Server Struktur - Ordner 3.1.2011\5076_hardcore_Ballads\5076-0014_See_Everything\3

usw...

in jedem ordner wie \5076-0014_See_Everything\ gibt es min 8 unterordner die nur zahlen haben...also 1 bis 12 ca. und da drinne sind die files
see everything steht für den namen des tracks und hardcore ballads oder jiggy pop steht für das produkt...alle produkte sind im Z:\Neue Server Struktur - Ordner 3.1.2011 folder
Member: pieh-ejdsch
pieh-ejdsch Feb 11, 2011 at 15:25:20 (UTC)
Goto Top
ersetze Zeile 41 bis 44

mit
for /d %%A in ("%Hauptordner%%Alle%") do for /d %%h in ("%%~A\*") do (  
	echo Durchsuche %%~nxh
	set "Ordner="  
	for /f "delims=" %%i in ('dir /s /b "%%~h\*.wav"') do for /f "tokens=* delims=1234567890_" %%j in ("%%~ni") do if not "%%~ni" == "%%j" (  

dann sollte es fuktionieren.

Gruß Phil
Member: jiggyjones
jiggyjones Feb 17, 2011 at 16:58:23 (UTC)
Goto Top
Hi Phil,

scheint zu funktionieren, läuft ziemlich langsam aber muss ich halt mit leben...nur noch ein kleines problem...da die überordner der files mit 1 -2-3-4-5 betitelt sind erscheint in der excel tabelle so ein eintrag:

1 Flute,Piano slow

anstatt der 1 sollte aber der überordner der eins angezeigt werden..also sprich der songname...kriegen wir das noch hin? face-smile
Member: pieh-ejdsch
pieh-ejdsch Feb 17, 2011 at 17:24:13 (UTC)
Goto Top
moin jiggyjones,

Hier ist mal (m)eine Strucktur:
C:\Users\Pieh-Ejdsch-AD>tree "T:\Neue Server Struktur - Ordner 3.1.2011"
Auflistung der Ordnerpfade für Volume 10GBFAT32
Volumeseriennummer : 00740053 B819:0B5D
T:\NEUE SERVER STRUKTUR - ORDNER 3.1.2011
├───5069_jiggy_Pop
│   ├───5069-0001_Breaking_Dawn
│   │   └───1
│   ├───5069-0002_Butterflies
│   │   └───1
│   ├───5069-0003_Dry_Up_Your_Tears
│   │   └───3
│   ├───5069-0004_Early_Morning
│   │   └───2
│   └───5069-0005_Feeling_You
│       └───3
└───5076_hardcore_Ballads
    ├───5076-0008_Life_Is_Nothing
    │   └───2
    ├───5076-0010_Not_Ashamed
    │   └───2
    ├───5076-0012_Playas_Get_Lonely_Too
    │   └───3
    └───5076-0014_See_Everything
        └───3
C:\Users\Pieh-Ejdsch-AD>dir /b /s "T:\Neue Server Struktur - Ordner 3.1.2011\*.wav"
T:\Neue Server Struktur - Ordner 3.1.2011\5069_jiggy_Pop\5069-0001_Breaking_Dawn\1\1_025bac089_extra.wav
T:\Neue Server Struktur - Ordner 3.1.2011\5069_jiggy_Pop\5069-0001_Breaking_Dawn\1\1_025bsa089_extra.wav
T:\Neue Server Struktur - Ordner 3.1.2011\5069_jiggy_Pop\5069-0001_Breaking_Dawn\1\1_025bse089_extra.wav
T:\Neue Server Struktur - Ordner 3.1.2011\5069_jiggy_Pop\5069-0001_Breaking_Dawn\1\1_025bsl089_extra.wav
T:\Neue Server Struktur - Ordner 3.1.2011\5069_jiggy_Pop\5069-0001_Breaking_Dawn\1\1_025bss089_extra.wav
T:\Neue Server Struktur - Ordner 3.1.2011\5069_jiggy_Pop\5069-0001_Breaking_Dawn\1\1_025ino089_extra.wav
T:\Neue Server Struktur - Ordner 3.1.2011\5069_jiggy_Pop\5069-0001_Breaking_Dawn\1\1_025itr089_extra.wav
T:\Neue Server Struktur - Ordner 3.1.2011\5069_jiggy_Pop\5069-0001_Breaking_Dawn\1\1_025mix089_extra.wav
T:\Neue Server Struktur - Ordner 3.1.2011\5069_jiggy_Pop\5069-0001_Breaking_Dawn\1\1_025out089_extra.wav
T:\Neue Server Struktur - Ordner 3.1.2011\5069_jiggy_Pop\5069-0001_Breaking_Dawn\1\1_025sub089_extra.wav
T:\Neue Server Struktur - Ordner 3.1.2011\5069_jiggy_Pop\5069-0001_Breaking_Dawn\1\1_025var089_extra.wav
T:\Neue Server Struktur - Ordner 3.1.2011\5069_jiggy_Pop\5069-0002_Butterflies\1\1_025bac089_extra.wav
T:\Neue Server Struktur - Ordner 3.1.2011\5069_jiggy_Pop\5069-0002_Butterflies\1\1_025bsa089_extra.wav
und die Settings:
set "HauptOrdner=T:\Neue Server Struktur - Ordner 3.1.2011"
Verzeichniss:
Z:\Neue Server Struktur - Ordner 3.1.2011
in diesem Ordner sind ca. 80 folder die dann in derem folder nochmals folder haben mit 1 2 3 4 5 6 und da sind die waves drinn...
davon bin ich ausgegangen und die Ordner zum einzelnen draufziehen sind die im "Neue Server Struktur - Ordner 3.1.2011"
- oder wie soll die Verfahrensweise sein?

Gruß Phil
Member: jiggyjones
jiggyjones Mar 16, 2011 at 15:58:54 (UTC)
Goto Top
T:\NEUE SERVER STRUKTUR - ORDNER 3.1.2011 
├───5069_jiggy_Pop 
│   ├───5069-0001_Breaking_Dawn 
│   │   └───1 
      I____2
       I____3
       I____ 4
       I_____5
│   ├───5069-0002_Butterflies 
│   │   └───1 
            I____ 2
             I____ 3
            I_____ 4
             I_____5
so siehts aus...und dann sollte halt der name mit in die tabelle...sprich: 5069-0002_Butterflies oder 5069-0001_Breaking_Dawn
und wenn es geht alle instrumente in eine einzelne zelle und das tempo in eine 2te zelle...für jeden namen quasi also:
5069-0001_Breaking_Dawn alle instrumente von ordner 1 bis 10 etc in eine zelle und das tempo in einer neuen
5069-0002_Butterflies alle instrumente der unterordner davon in eine zelle und das tempo in einer neuen zelle

usw...

so verhindert wir doppelte einträge falls in dem einen ordner 1 die selben instrumente sind wie im unterordner 2 und 3 und 4 usw...

vielen dank phil und sorry für die delayed antwort

aber der batch an sich funktioniert bei windows xp ...nur halt sehr langsam, wahrscheinlich weil er jedes instrument in eine neue zelle packt ..hat grad 2 stunden für 22 ordner mit namen gebraucht wo jeweils max 10 unterordner mit files drinne waren..also quasi 2-3 stunden für 220 ordner mit file

Die ordner 2-3-4-5-6-7 sind da wo sich auch die 1 befindet..konnte es nur nicht richtig darstellen...

[Edit Biber] Tree code-formatiert. [/Edit]
Member: pieh-ejdsch
pieh-ejdsch Mar 18, 2011 at 19:29:27 (UTC)
Goto Top
moin jiggyjones,

was doch so eine kleine Strategieänderung doch in der Performance ausmacht....

Hier haste nochmal eine schnellere Variante und es ist so Zieh... (es hat sich ja auch ganz schön gezogen)
...ziemlich egal was für einen Ordner Du draufziehst es wird der Name des Ordners wie angegeben 3 Ebenen vor der Datei Extrahiert
nur wenn Du die Ordner direkt vor der Datei (1,2,3) also nicht den OrdnerNamen welcher alles beinhaltet nicht vollständig draufziehst wird auch nur dieser Bestandteil ab den Ordner in die CSV-Zeile Eingetragen.

wenn Du den Hauptordner druffziehst wird die csv -komplett njeu geschrieben also so wie vorher.

@echo off & setlocal
:: Anzupassende Variablen
:: Hauptordner=Hier kommt der Komplette Pfad des Ordners hin, welcher die vielen Ordner beinhaltet.
:: Filterdatei=Hier kommt der komplette Pfad  der abrevations - Filter - Datei hinein
:: Ausgabe=Hier kommt der komplette Pfad der Ausgabe csv Datei rein
set "HauptOrdner=T:\Neue Server Struktur - Ordner 3.1.2011"  

:: gemmessen vom Ordner des Relevanten Namens bis zur Datei -> gezählt in Backslashes vom Backslash vor dem Ordner bis zur Datei
set "NameOrdnerTiefeZurDatei=3"  
set "Filterdatei=T:\Neuer Ordner\abrevations.txt"  
set "Ausgabe=T:\Percusions.csv"  
set "TempoS=1-70:slow"  
set "TempoM=71-110:Mid Tempo"  
set "TempoF=111-180:Uptempo"  
if "%~1" == "" echo Syntaxfehler! & goto :eof  
if "%~1" == "/?" (echo Syntax:&echo.  
echo %~n0 Ordner1 [Ordner2 ...]
echo                 Die Datei "%Ausgabe%" wird fortgesetzt und  
echo                  einzelne Zeilen erneuert. Wobei die Aeltere Zeile ersetzt wird.
echo.
echo %~n0 "%Hauptordner%"  
echo                Die Datei "%Ausgabe%" wird geloescht und  
echo                 komplett neu geschrieben.
goto :eof
)
setlocal enabledelayedexpansion
for /f "usebackq tokens=1,2 delims=:" %%i in ("%Filterdatei%") do @for %%k in (%%j) do @echo "!..%%i!"|findstr "%%k" >nul || set "..%%i=!..%%i!%%k "  
(
for /f "tokens=1,2 delims=.=" %%i in ('set ..') do @echo %%i: %%j  
)>"%temp%\tmp"  
type "%temp%\tmp">"%Filterdatei%"  
endlocal
if /i not  "%~1" == "%Hauptordner%" (set "Alle="  
goto :begin
)
type nul >"%Ausgabe%"  
set "Alle=1"  
:begin
if not exist "%~1\" goto :sort  
if not "!OS!" == "%OS%" setlocal enabledelayedexpansion  
(
for /f "tokens=* delims=" %%i in ('dir /s /b "%~1\*.wav"^&echo.L+a.s-t\line\xyz') do (  
	set "Name=%%i"  
	set "Token=0"  
	for %%j in ("!Name:\=" "!") do set /a Token+=1  
	set /a Token = Token - NameOrdnerTiefeZurDatei
	for /l %%j in (1,1,!Token!) do set "Name=!Name:*\=!"  
	for /f "tokens=1 delims=\" %%j in ("!Name!") do (  
		if not "!AltOrdner!"=="%%j" (  
			if not "L+a.s-t" == "%%j" echo Dursuche %%j  
			set "NewLine="  
			for /f "delims=0" %%l in ("!AltTempo!") do for %%m in ("%tempoS%" "%tempoM%" "%tempoF%") do for /f "tokens=1,2* delims=-:" %%n in ("%%~m") do if %%n leq %%~l if %%o geq %%~l (  
				for /f "tokens=1* delims=:" %%q in ('findstr "!AltName!" "%Filterdatei%"') do echo "%%r" |findstr "!AltName!">nul 2>nul&&set "NewLine=!NewLine!,%%q"  
				set "NewLine=!NewLine:~1!"  
				set "AltName="  
				>&3 echo !AltOrdner!;!NewLine!;%%p
			)
		)
		set "AltOrdner=%%j"  
		for /f "tokens=* delims=1234567890_" %%k in ("%%~ni") do (  
			set "Name=%%k"  
			set "AltTempo=!Name:~3,3!"  
			echo "!AltName!"|find "!Name:~0,3!" >nul 2>nul ||set "AltName=!AltName! !Name:~0,3!"  
)	)	)
)3>>"%Ausgabe%"  
endlocal
:sort
if not "%~2" == "" shift & goto :begin  
if defined alle goto :eof
setlocal enabledelayedexpansion
move "%Ausgabe%" "%temp%\tmp" >nul  
echo.&echo loesche Alte Eintraege aus "%Ausgabe%"  
for /f "usebackq tokens=1-3 delims=;" %%i in ("%temp%\tmp") do (  
	for /f "tokens=* delims=:" %%m in ('findstr /b "%%i;.*;%%k" "%temp%\tmp"') do set "Line=%%m"  
	set "Opt="  
	findstr /b "%%i;.*;%%k" "%Ausgabe%" >nul 2>nul || set "Opt=1"  
	if defined Opt @echo !Line!>>"%Ausgabe%"  
)

Gruß Phil
Member: jiggyjones
jiggyjones Mar 25, 2011 at 14:04:34 (UTC)
Goto Top
Der Batch läuft grade und man sieht jetzt beim Batchen welche unterordner er sich rausnimmt und durchsucht

kurz vorm ende der 14 ordner kommt die Meldung:

FINDSTR: Keine Suchzeichenfolge (3mal also bei 3 unterordnern)


und am ende kommt:

Loesche alte einträge aus "Z:\ausgabedatei.csv"


und dann wird etwas in der csv anscheinend gelöscht und wenn ich die csv danach aufmache kommt so halb was richtiges und manchmal so wirre einträge von der abbrevation.txt 1zu1 hineinkopiert...ungefähr so:

5065_Produktname ~1 slow
5065-0001_About_You Bass,Drums,Flute,Guitar,Percussion,Piano,Strings slow
5065-0001_About_You Bass,Drums,Flute,Guitar,Percussion,Piano,Strings slow
Saxophone: sax
Strings: mel spt cel orc piz str via vio
Synthesizer: bss arp saw syn cro etn yn1
Trombone: trb
Trumpet: brs hrn ptr trp tnr trm
Vocals: chf chm cho rap spw vfx voc vof vom
World: crt cnt brd mid kyb shp zrn spr ddk sol nej enh hrm dje gui mrb mar tbs git ga0 gtg wah sit eth tar kan oud buz ntr tnb snt knn saz dlc tum dmr dul mnd vox
5065-0003_Born Bass,Drums,Guitar,Harp,Percussion,Piano Mid Tempo
5065-0004_City Bass,Drums,Effects,Guitar,Piano,Strings,Synthesizer,Vocals Mid Tempo
5065-0005_Club Bass,Drums,Effects,Guitar,Pads,Percussion,Piano,Strings,Trumpet slow
5065-0006_Elem Bass,Drums,Guitar,Percussion,Piano,Strings,Synthesizer Mid Tempo
5065-0007_Force Bass,Drums,Guitar,Percussion,Piano,Strings Mid Tempo
5065-0008_Get Bass,Drums,Guitar,Percussion,Piano,Strings,Synthesizer,Trumpet Mid Tempo
5065-0009_Gri Bass,Drums,Flute,Guitar,Percussion,Strings Mid Tempo
5065-0010_Hate Bass,Drums,Flute,Guitar,Organ,Percussion,Strings,Synthesizer Mid Tempo
5065-0011_Hus Bass,Drums,Guitar,Percussion,Piano,Strings Mid Tempo
5065_Produktname Uptempo
5065-0012_Jiggy Bass,Drums,Guitar,Percussion,Piano,Strings,Synthesizer slow
5065-0013_Jointz Bass,Drums,Flute,Guitar,Percussion,Synthesizer slow
5065-0014_Judg Bass,Drums,Flute,Guitar,Organ slow
5065-0002_After_ Bass,Drums,Effects,Guitar,Piano,Strings,Synthesizer Mid Tempo

hinter about you kommen abbrevation einträge ??!?? die nicht übersetzt wurden
ab 0004 siehts gut aus...da scheint es zu klappen..aber der letzte eintrag ist ja wieder 0002...irgendwie alles sehr verwirrend ...perfomance mäßig ist das ding jetzt super schnell...wir sind nah drann phil face-smile

ab bass kommt es in die 2te zelle das klappt...
Member: jiggyjones
jiggyjones Mar 25, 2011 at 14:43:55 (UTC)
Goto Top
Ich hab jetzt nochmal das ding über win 7 laufen lassen und die komischen abbrevation einträge sind dort nicht zu sehen er hat anscheinend alle 14 umgewandelt jedoch ist mir aufgefallen das er bei dem ersten ABOUT YOU was ein tempo von 104 hat trotzdem in der csv datei SLOW angegeben hat was ja eigentlich laut batch im midtempo liegen sollte...dies wäre ein fataler fehler wenn das schon öfters passiert ist das ich schon einige mit dem alten langsamen batch in unsere xls datei eingepflegt habe....

die oben genannten fehler FINDSTR: Keine Suchzeichenfolge (3mal also bei 3 unterordnern
kamen trotzdem...

unser fileaufbau ist:
1_05gte104_SST_about you_intro_a#.wav

die dreistellige zahl ( 104 ) die immer nach dem instrument kommt ist die geschwindigkeit..wie kann es sein das er diese 104 als slow einstuft? ich kann mir nur vorstellen das er die datei ab 04 liest und nicht 104....mir graut es wenn ich an die vielen anderen files denke die ich nicht überprüft habe und einfach in die xls eingetragen habe....

ich hoffe wir schaffen das zu fixen...

danke phil


5065-0001_About_You;Bass Drums Flute Guitar Percussion Piano Strings;slow

neue info: er setzt anscheinend die tempos nicht richtig um..hab hier ein song der ist 90bpm und der batch hat ihn als slow kategorisiert....die anderen die über 100 sind sind auch als slow betitelt...hab jetzt nur dieses produkt gecheckt werde die anderen auch noch prüfen müssen...
Member: jiggyjones
jiggyjones Mar 25, 2011 at 15:13:15 (UTC)
Goto Top
neue info: beim alten batch funktionierte die zuordnung der tempos es scheint tatsächlich ein problem in dem neuen batch nur zu sein...hoffe du kannst es fixen...

danke phiiiillllll