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?
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?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 21.01.2011 um 13:02:36 Uhr
Verschieben von "Datenbanken" nach Papierkorb erstmal nach "Bätchkrams".
Content-ID: 159146
Url: https://administrator.de/contentid/159146
Ausgedruckt am: 20.11.2024 um 11:11 Uhr
69 Kommentare
Neuester Kommentar
moin jiggyjones,
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
nun möchte ich wissen ob es einen batch befehl gibt womit ich eine .bat datei schreiben kann
der Befehl heisst: Notepaddas 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
ist heute ist schon wieder Freitag?.
was noch zu klären ist:
Gruß Phil
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
so richtig weiss ich immer noch nicht, was in die Ausgabe.txt hineingeschrieben werden soll.
das müsste dann ungefähr so gehen, wenn in der Filterdatei nach demdrei Buchstaben ein Leerzeichen kommt und dann das anderen Wort einDoppelpunkt kommt und dann die drei Buchstaben.
[Edit: Fehler(chen) beseitigt]
Gruß Phil
sprich:
if gln dann gloony in txt001.txt
if hhn dann herohahn in txt001.txt mit einfügen
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
@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
Moin jiggyjones,
willkommen im Forum.
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.
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]
willkommen im Forum.
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.
würde dir dann gern mehr infos schicken
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]
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
kann man die zeile nicht ändern
ist schon geschehenPS. Über IM werde ich nicht machen! Hier wird gelernt und nicht beim Chatten!
Gruß Phil
ja was nu...
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 02und 03 der Batch an
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
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
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.
Batch speichen unter: "Wie Du die auch immer nennen willst (ohne führende Ziffern).cmd"
Gruß Phil
Moin jiggyjones,
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
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
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
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
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:
Gruß Phil
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
das mit der Seperierten Zeile wird kein Problem sein aber bevor ich noch zehnmal die Batch ändere:
Gruß Phil
- 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.
- statt einer xls kann auch eine csv mit Semikiola etc. erstellt werden. Dazu werden aber infos über die Formatierung (Zeile; Spalte) gut.
Gruß Phil
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
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
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
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
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
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
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
moin jiggyjones,
Ich hab Dir den Code nochmals Überarbeitet.
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:
im Batch ganz unten drangehangen nachholen.
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
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%"
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
moin jiggyjones,
wenn die Files eine Zahl und einen Unterstrich vorangesetzt bekommen haben
füge in der Zeile 44.
zwischen die 0 (Null) und dem " (Anführungszeichen) den Unterstrich ein.
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
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" (
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
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
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
wenn Z:\Musik Dein Hauptordner ist:
anstatt der Zeile 41
schreibst Du diese Zeile
und die Zeile 44
machst Du zu dieser
das sollte eingentlich genügen und die Einzelordner zum Draufziehen sind dann die im Verzeichnis "Z:Musik" sind.
Gruß Phil
anstatt der Zeile 41
for /d %%h in ("%Hauptordner%%Alle%") do (
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" (
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
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).
Gruß Phil
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
ersetze Zeile 41 bis 44
mit
dann sollte es fuktionieren.
Gruß Phil
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
moin jiggyjones,
Hier ist mal (m)eine Strucktur:
und die Settings:
- oder wie soll die Verfahrensweise sein?
Gruß Phil
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
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"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...
- oder wie soll die Verfahrensweise sein?
Gruß Phil
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.
Gruß Phil
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