Umbennen mittels Text Dateien
Umbennen von mehreren dateien in einem Ordner unter zuhilfenahme von Tekstdateien.
Hallo
Erstmal Gruß an alle.
Lob für die Großartigen Antworten aus den ich immer wieder
schöpfen konnte, leider trete ich auf der Stelle und brauche Hilfe.
System: Win2000 SP4
Habe ein Umbennen Problem.
In einem Musikordner sind zehn musikstücke: Titel1.mp3, Titel2.mp3 usw.
in einer Datei stehen die 10 Titel die ich verwenden möchte,
um die mp3s umzubenennen.
Ich habe for diese Ren.Bat immer in das verzeichnis zu verschieben, daß
umbenenannt wird, so muß ich nur nach dem standort der (Künstler - Atrist.txt) suchen.
Die Textdatei sieht so aus:
01_Its OK
02_Love Wont Wait
03_Tide Is High
usw:
Variablen:
SET SUCHE01=Verzeichnis von
SET SUCHE02="%INTER% - %ALBUM%"
SET USRTMP1=C:\Temp1.txt
SET USRTMP2=C:\Temp2.txt
Das hier weigert sich zu arbeiten, also habe ich das Problem mit einem Zweizeiler gelöst.
Was ist bei dieser Anweisung falsch?
For /F "Tokens=3 Delims= " %%a in (DIR %%0 | FIND /I "%SUCHE01%") do SET DATPFAD=%%a
So ermitle ich den Aktuellen Standort:
REM Aktuellen Verzechinss Suchen
DIR %%0 | FIND /I "%SUCHE01%" > %USRTMP1%
For /F "Tokens=3 Delims= " %%a in (%USRTMP1%) do SET DATPFAD=%%a
ECHO. Auf dem Datentraeger wird nach %SUCHE2% gesucht:
For %%d In (E ) Do DIR %%d:\%SUCHE02%.txt /s | FIND /I /n "%SUCHE01%" > %USRTMP2%
For /F "Tokens=4 Delims= " %%a in (%USRTMP2%) do SET SUCHPFAD=%%a
Ich würde gerne die Angaben Künstler und Album aus dem Verzeichnissbaum extrachieren.
Pfad: z.B. E:\E\A\"Ace Of Base"\Flowers
Wenn das mein Pfad ist wie schaffe ich es die letzten 2 Einträge zu isolieren?
Wenn die Verzeichnisstiefe konstant ist, sollte es machbar sein.
Problematisch is es wenn die Tiefe der Struktur variiert.
Frage 1:
Kann ich das Ergebniss von DIR | FIND weiter bearbeiten ohne
das Lästige Schreiben in eine Text Datei?
Frage 2:
Was hat mit dem "^" auf sich?
diesen habe ich auch mal gesehen ~y oder etwas ähnliches.
die beiden waren in einer For Schleife eingebaut.
Die Grüßte Herausforferung bei meinen Batches ist es alles soweit zu satndarisieren,
das alles auf allen Rechnern läuf. Es sind Immerhin Drei.
Deswegen variiren die Verzechnis Strukturen.
Für Hilfestellung und Anregungen bin ich sehr dankbar.
Hallo
Erstmal Gruß an alle.
Lob für die Großartigen Antworten aus den ich immer wieder
schöpfen konnte, leider trete ich auf der Stelle und brauche Hilfe.
System: Win2000 SP4
Habe ein Umbennen Problem.
In einem Musikordner sind zehn musikstücke: Titel1.mp3, Titel2.mp3 usw.
in einer Datei stehen die 10 Titel die ich verwenden möchte,
um die mp3s umzubenennen.
Ich habe for diese Ren.Bat immer in das verzeichnis zu verschieben, daß
umbenenannt wird, so muß ich nur nach dem standort der (Künstler - Atrist.txt) suchen.
Die Textdatei sieht so aus:
01_Its OK
02_Love Wont Wait
03_Tide Is High
usw:
Variablen:
SET SUCHE01=Verzeichnis von
SET SUCHE02="%INTER% - %ALBUM%"
SET USRTMP1=C:\Temp1.txt
SET USRTMP2=C:\Temp2.txt
Das hier weigert sich zu arbeiten, also habe ich das Problem mit einem Zweizeiler gelöst.
Was ist bei dieser Anweisung falsch?
For /F "Tokens=3 Delims= " %%a in (DIR %%0 | FIND /I "%SUCHE01%") do SET DATPFAD=%%a
So ermitle ich den Aktuellen Standort:
REM Aktuellen Verzechinss Suchen
DIR %%0 | FIND /I "%SUCHE01%" > %USRTMP1%
For /F "Tokens=3 Delims= " %%a in (%USRTMP1%) do SET DATPFAD=%%a
ECHO. Auf dem Datentraeger wird nach %SUCHE2% gesucht:
For %%d In (E ) Do DIR %%d:\%SUCHE02%.txt /s | FIND /I /n "%SUCHE01%" > %USRTMP2%
For /F "Tokens=4 Delims= " %%a in (%USRTMP2%) do SET SUCHPFAD=%%a
Ich würde gerne die Angaben Künstler und Album aus dem Verzeichnissbaum extrachieren.
Pfad: z.B. E:\E\A\"Ace Of Base"\Flowers
Wenn das mein Pfad ist wie schaffe ich es die letzten 2 Einträge zu isolieren?
Wenn die Verzeichnisstiefe konstant ist, sollte es machbar sein.
Problematisch is es wenn die Tiefe der Struktur variiert.
Frage 1:
Kann ich das Ergebniss von DIR | FIND weiter bearbeiten ohne
das Lästige Schreiben in eine Text Datei?
Frage 2:
Was hat mit dem "^" auf sich?
diesen habe ich auch mal gesehen ~y oder etwas ähnliches.
die beiden waren in einer For Schleife eingebaut.
Die Grüßte Herausforferung bei meinen Batches ist es alles soweit zu satndarisieren,
das alles auf allen Rechnern läuf. Es sind Immerhin Drei.
Deswegen variiren die Verzechnis Strukturen.
Für Hilfestellung und Anregungen bin ich sehr dankbar.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 29461
Url: https://administrator.de/contentid/29461
Ausgedruckt am: 22.11.2024 um 21:11 Uhr
12 Kommentare
Neuester Kommentar
Moin TommyC,
ein paar Sachen kann ich schon sagen, ein paar andere sind mir noch unklar im Moment:
Variablen:
- und einen Parameter %%0 gibt es nicht.
%0 wäre der Name der Batchdatei, %1 der erste Parameter, falls Du die Batchdatei mit einem Verzeichnisnamen aufrufst.
- und ein Find geht in die Grütze, wenn im Suchstring Leerzeichen sund (bei %SUCHE01%
For /F "Tokens=3 Delims= " %%a in ('DIR %1 ^| FIND /I "%SUCHE01%"') do SET DATPFAD=%%a
DIR "E:\%SUCHE02%.txt" /s | FIND /I /n "%SUCHE01%" > %USRTMP2%
(
For /F "Tokens=4 Delims= " %%a in (%USRTMP2%) do SET SUCHPFAD=%%a
So, mehr versteh ich momentan noch nicht, vor allem das "Verzeichnis von" ist mir nicht klar.
Zu den FOR-Parametern mit der Tilde ("~") steht einiges in der Hilfe zu For ("For /?" am CMD-Prompt)
Poste doch noch noch mal bitte den kompletten Batch incl. der Parameter, die Du dem mitgibst.
Aber nach dem Frühstück reicht.
Gruß
Biber
ein paar Sachen kann ich schon sagen, ein paar andere sind mir noch unklar im Moment:
Variablen:
SET SUCHE01=Verzeichnis von
Dieses Suchkriterium versteh ich nicht... wo könntest Du die Zeichenkette "Verzeichnis von" finden???? Nicht verstanden...SET SUCHE02="%INTER% - %ALBUM%"
SET USRTMP1=C:\Temp1.txt
SET USRTMP2=C:\Temp2.txt
SET USRTMP1=C:\Temp1.txt
SET USRTMP2=C:\Temp2.txt
Was ist bei dieser Anweisung falsch?
For /F "Tokens=3 Delims= " %%a in (DIR %%0 | FIND /I "%SUCHE01%") do SET DATPFAD=%%a
- Die Anweisung IN der Klammer muss in einfache Hochkommata und, wenn wenn da ein Steuerzeichen dabei ist, ein Caret davor ("^")For /F "Tokens=3 Delims= " %%a in (DIR %%0 | FIND /I "%SUCHE01%") do SET DATPFAD=%%a
- und einen Parameter %%0 gibt es nicht.
%0 wäre der Name der Batchdatei, %1 der erste Parameter, falls Du die Batchdatei mit einem Verzeichnisnamen aufrufst.
- und ein Find geht in die Grütze, wenn im Suchstring Leerzeichen sund (bei %SUCHE01%
For /F "Tokens=3 Delims= " %%a in ('DIR %1 ^| FIND /I "%SUCHE01%"') do SET DATPFAD=%%a
So ermitle ich den Aktuellen Standort:
REM Aktuellen Verzechinss Suchen
DIR %%0 | FIND /I "%SUCHE01%" > %USRTMP1%
DIR %1 | FIND /I "%SUCHE01%" > %USRTMP1%REM Aktuellen Verzechinss Suchen
DIR %%0 | FIND /I "%SUCHE01%" > %USRTMP1%
For /F "Tokens=3 Delims= " %%a in (%USRTMP1%) do SET DATPFAD=%%a
For /F "Tokens=3 Delims= " %%a in (%USRTMP1%) do SET DATPFAD=%%aECHO. Auf dem Datentraeger wird nach %SUCHE2% gesucht:
Nein, nach %Suche02%For %%d In (E ) Do DIR %%d:\%SUCHE02%.txt /s | FIND /I /n "%SUCHE01%" > %USRTMP2%
Nun mal nicht unnötig um die Ecke denken:DIR "E:\%SUCHE02%.txt" /s | FIND /I /n "%SUCHE01%" > %USRTMP2%
(
For /F "Tokens=4 Delims= " %%a in (%USRTMP2%) do SET SUCHPFAD=%%a
So, mehr versteh ich momentan noch nicht, vor allem das "Verzeichnis von" ist mir nicht klar.
Zu den FOR-Parametern mit der Tilde ("~") steht einiges in der Hilfe zu For ("For /?" am CMD-Prompt)
Poste doch noch noch mal bitte den kompletten Batch incl. der Parameter, die Du dem mitgibst.
Aber nach dem Frühstück reicht.
Gruß
Biber
Hallo zusammen!
das mit dem akt. Verzeichnis geht mit %~dp0 einfacher
Das mit der wechselnden Verzeichnis-Tiefe ist schon schwieriger, hier mal mein Vorschlag.
Läuft zwar soweit, hat aber keine Funktion um die "Tiefe" zu messen, also fängt er "oben" an (5. Backslash) und arbeitet sich nach unten vor.
Wenns noch tiefere Pfade gibt, muss man entsprechend höhere FOR-Schleifen einsetzen.
SET Album=
SET Inter=
FOR /F "delims=\ tokens=5" %%i in ("%~dp0") do set Album=%%i
FOR /F "delims=\ tokens=4" %%i in ("%~dp0") do set Inter=%%i
IF NOT "%Album%"=="" goto End
FOR /F "delims=\ tokens=4" %%i in ("%~dp0") do set Album=%%i
FOR /F "delims=\ tokens=3" %%i in ("%~dp0") do set Inter=%%i
IF NOT "%Album%"=="" goto End
FOR /F "delims=\ tokens=3" %%i in ("%~dp0") do set Album=%%i
FOR /F "delims=\ tokens=2" %%i in ("%~dp0") do set Inter=%%i
:End
SET CD=%INTER%-%ALBUM%
FOR /F "delims= eol=#" %%a in (artist.txt) do ren "%%a.mp3" "%CD%-%%a.mp3"
pause >nul
Bin nicht so der FOR-Profi, den Block kann man bestimmt auch noch in 2 -3 Zeilen pessen, aber erstmal läuft es!
Bei den unterschiedlicher Tiefe ist es schwer, eine feste FOR-Bedingung zu setzen, also wird die Variable %Album% nach jeder Schleife geprüft, ob da überhaupt was drinsteht, wenn ja, wird gleich die nächste für den Interpreten genommen und dann zum Unbenennen gesprungen.
my2cents
PCB
So ermitle ich den Aktuellen Standort:
REM Aktuellen Verzechinss Suchen
DIR %%0 | FIND /I "%SUCHE01%" >
%USRTMP1%
For /F "Tokens=3 Delims= " %%a in
(%USRTMP1%) do SET DATPFAD=%%a
REM Aktuellen Verzechinss Suchen
DIR %%0 | FIND /I "%SUCHE01%" >
%USRTMP1%
For /F "Tokens=3 Delims= " %%a in
(%USRTMP1%) do SET DATPFAD=%%a
das mit dem akt. Verzeichnis geht mit %~dp0 einfacher
Ich würde gerne die Angaben
Künstler und Album aus dem
Verzeichnissbaum extrachieren.
Pfad: z.B. E:\E\A\"Ace Of
Base"\Flowers
Wenn das mein Pfad ist wie schaffe ich es
die letzten 2 Einträge zu isolieren?
Problematisch is es wenn die Tiefe der
Struktur variiert.
Künstler und Album aus dem
Verzeichnissbaum extrachieren.
Pfad: z.B. E:\E\A\"Ace Of
Base"\Flowers
Wenn das mein Pfad ist wie schaffe ich es
die letzten 2 Einträge zu isolieren?
Problematisch is es wenn die Tiefe der
Struktur variiert.
Das mit der wechselnden Verzeichnis-Tiefe ist schon schwieriger, hier mal mein Vorschlag.
Läuft zwar soweit, hat aber keine Funktion um die "Tiefe" zu messen, also fängt er "oben" an (5. Backslash) und arbeitet sich nach unten vor.
Wenns noch tiefere Pfade gibt, muss man entsprechend höhere FOR-Schleifen einsetzen.
SET Album=
SET Inter=
FOR /F "delims=\ tokens=5" %%i in ("%~dp0") do set Album=%%i
FOR /F "delims=\ tokens=4" %%i in ("%~dp0") do set Inter=%%i
IF NOT "%Album%"=="" goto End
FOR /F "delims=\ tokens=4" %%i in ("%~dp0") do set Album=%%i
FOR /F "delims=\ tokens=3" %%i in ("%~dp0") do set Inter=%%i
IF NOT "%Album%"=="" goto End
FOR /F "delims=\ tokens=3" %%i in ("%~dp0") do set Album=%%i
FOR /F "delims=\ tokens=2" %%i in ("%~dp0") do set Inter=%%i
:End
SET CD=%INTER%-%ALBUM%
FOR /F "delims= eol=#" %%a in (artist.txt) do ren "%%a.mp3" "%CD%-%%a.mp3"
pause >nul
Bin nicht so der FOR-Profi, den Block kann man bestimmt auch noch in 2 -3 Zeilen pessen, aber erstmal läuft es!
Bei den unterschiedlicher Tiefe ist es schwer, eine feste FOR-Bedingung zu setzen, also wird die Variable %Album% nach jeder Schleife geprüft, ob da überhaupt was drinsteht, wenn ja, wird gleich die nächste für den Interpreten genommen und dann zum Unbenennen gesprungen.
my2cents
PCB
@PCB
Aber das, was Du mit %~dp0 machst, geht natürlich auch eins zu eins mit der Variablen %cd% / aktuelles Verzeichnis.
Das würde ermöglichen, dass die RenameMp3.bat irgendwo im %path% liegt, meinetwegen im %windir%-Verzeichnis und das ein beliebiger Ordner über das Kontextmenü und einen Menüpunkt "RenameMP3s" verarbeitet werden könnte.
Der Batch selbst (der ja den Parameter "UnterverzeichnisXY") bekommt, braucht dann nur noch zu prüfen, ob in diesem Verzeichnis eine "artist.txt" existiert und, wenn ja, in diesem Verzeichnis (also %cd%) vor sich hin batchen.
Oder noch einfacher, einfach einen MP3RenameWithList.bat mit einem Parameter \Pfad\zur\NeueMP3Name.txt aufzurufen.
Das können auch nicht mehr als 20 Zeilen sein.
Mal abwarten, was TommyC von dieser Mimik hält. Ich halte es für Dönekens, diese RenameMP3.bat jedesmal zu kopieren.
P.S. Deine Zeile
Grüße
Biber
das mit dem akt. Verzeichnis geht mit %~dp0 einfacher
Ja, das stimmt zwar, aber dann müsste man/frau es tatsächlich so machen, dass diese RenameMP3.bat wirklich jedesmal in das Verzeichnis kopiert wird, wo die MP3s sind. Denn %~dp0 bezieht sich ja immer auf den Speicherort der Batch-Datei.Aber das, was Du mit %~dp0 machst, geht natürlich auch eins zu eins mit der Variablen %cd% / aktuelles Verzeichnis.
Das würde ermöglichen, dass die RenameMp3.bat irgendwo im %path% liegt, meinetwegen im %windir%-Verzeichnis und das ein beliebiger Ordner über das Kontextmenü und einen Menüpunkt "RenameMP3s" verarbeitet werden könnte.
Der Batch selbst (der ja den Parameter "UnterverzeichnisXY") bekommt, braucht dann nur noch zu prüfen, ob in diesem Verzeichnis eine "artist.txt" existiert und, wenn ja, in diesem Verzeichnis (also %cd%) vor sich hin batchen.
Oder noch einfacher, einfach einen MP3RenameWithList.bat mit einem Parameter \Pfad\zur\NeueMP3Name.txt aufzurufen.
Das können auch nicht mehr als 20 Zeilen sein.
Mal abwarten, was TommyC von dieser Mimik hält. Ich halte es für Dönekens, diese RenameMP3.bat jedesmal zu kopieren.
P.S. Deine Zeile
FOR /F "delims= eol=#" %%a in (artist.txt) do ren "%%a.mp3" "%CD%-%%a.mp3"
passt nicht zu dem Szenario ...Title1.mp3, Title2.mp3,...TitleN.mp3 liegen vor.Grüße
Biber
Hm, TommyC,
nun hast Du mich auch verunsichert, was die sinnvolle Strategie ist, diesen Batch zu organisieren bzw. zu überlegen, wie der Aufruf sinnvoll sein kann.
Wenn ich das richtig verstehe, wird der Batch immer aufgerufen, nachdem durch manuelle Vorarbeit folgendes sichergestellt ist:
a) es existiert irgendwo auf einer Platte eine Unterverzeichnisstruktur "...\Interpret\Album" (z.B. .."\Pink Floyd\Wish You Were Here")
b) in diesem Verzeichnis liegen 1...n *.Mp3-Dateien, die Title1.mp3.....TitleN.mp3 heißen
c) ebenfalls in diesem Verzeichnis befindet sich dir Textdatei mit den endgültigen Titeln für Titel1---TitelN.mp3.
- Nebenbedingung: die RenameMP3WithList.bat befindet sich im %path% oder wird explizit mit Pfadangab gerufen. Jedesmal in das Verzeichnis zu kopieren ist ...ähh.. das machen wir nicht.
Somit wären als Aufrufszenarien denkbar:
-vom CMD-Prompt aus Aufrufen mit "RenameMP3WithList.bat [Parameter pfad\zu_einer\TitelTextDatei.xyz]"
---> denn im selben Verzeichnis läßt sich a) und b) ermitteln.. keine weitere Eingabe erforderlich
-oder-
- über Explorer/Kontextmenü Folderbezogen, also den Batch auf einen Folder anwenden
> dann muss aber die Titel-Textdatei einen festen Namen haben, der in diesem Verzeichnis gesucht werden kann
-oder-
- über Explorer/Kontextmenü Dateibezogen, also den Batch auf die Titel-Textdatei anwenden.
So...jetzt hab ich es sortiert.*grübel*..dann wäre die Lösung doch..hmm...
> "RenameMP3WithList.bat [Parameter pfad\zu_einer\TitelTextDatei.xyz]"
...denn wenn es den gibt, dann können die beiden Explorer-Kontextmenüvarianten den aufrufen
Moment, ich mach mir mal ein Becks auf und schrubbele den Batch zusammen...
Gruß
Biber
nun hast Du mich auch verunsichert, was die sinnvolle Strategie ist, diesen Batch zu organisieren bzw. zu überlegen, wie der Aufruf sinnvoll sein kann.
Wenn ich das richtig verstehe, wird der Batch immer aufgerufen, nachdem durch manuelle Vorarbeit folgendes sichergestellt ist:
a) es existiert irgendwo auf einer Platte eine Unterverzeichnisstruktur "...\Interpret\Album" (z.B. .."\Pink Floyd\Wish You Were Here")
b) in diesem Verzeichnis liegen 1...n *.Mp3-Dateien, die Title1.mp3.....TitleN.mp3 heißen
c) ebenfalls in diesem Verzeichnis befindet sich dir Textdatei mit den endgültigen Titeln für Titel1---TitelN.mp3.
- Nebenbedingung: die RenameMP3WithList.bat befindet sich im %path% oder wird explizit mit Pfadangab gerufen. Jedesmal in das Verzeichnis zu kopieren ist ...ähh.. das machen wir nicht.
Somit wären als Aufrufszenarien denkbar:
-vom CMD-Prompt aus Aufrufen mit "RenameMP3WithList.bat [Parameter pfad\zu_einer\TitelTextDatei.xyz]"
---> denn im selben Verzeichnis läßt sich a) und b) ermitteln.. keine weitere Eingabe erforderlich
-oder-
- über Explorer/Kontextmenü Folderbezogen, also den Batch auf einen Folder anwenden
> dann muss aber die Titel-Textdatei einen festen Namen haben, der in diesem Verzeichnis gesucht werden kann
-oder-
- über Explorer/Kontextmenü Dateibezogen, also den Batch auf die Titel-Textdatei anwenden.
So...jetzt hab ich es sortiert.*grübel*..dann wäre die Lösung doch..hmm...
> "RenameMP3WithList.bat [Parameter pfad\zu_einer\TitelTextDatei.xyz]"
...denn wenn es den gibt, dann können die beiden Explorer-Kontextmenüvarianten den aufrufen
Moment, ich mach mir mal ein Becks auf und schrubbele den Batch zusammen...
Gruß
Biber
So,
(ein Becks später...)
Hier wäre mal der erste Entwurf:
Hab ich doch gesagt, dass das keine 20 Zeilen sind...
Ein Test bei mir bringt ( mit "ECHO ren Title%cnt%.mp3 %1" statt "ren Title%cnt%.mp3 %1" natürlich)
Ich bin jetzt von einer Text-Datei-mit-Titeln ausgegangen wie in Deinem ersten Posting..nur die "neuen" Namen sind drin. Die bisherigen Dateien werden erwartet als Titel1.mpg....bis Titelnn.mpg.
Das Umbenennen macht die drittletzte Zeile unten:
( bei einer Datei Mp3Titles.txt dieser Form
01_Its OK
02_Love Wont Wait
03_Tide Is High
(Ende Textdatei)
Ebenso könntest Du in dieser Text-Datei-mit-Titeln aber auch "neuen" und "alten" *.mp3-Namen hinterlegen.
Ist allerdings Mehraufwand und tippfehlerträchtig
...(alternative Form der Songtitel-Textdatei)
Titel01.mp3;01_masterfile
Titel02.mp3;02_Sister
Titel03.mp3;03_Southern
...
Die würde ich aber mit Semikolon trennen (kommt weder im bisherigen Dateinamen noch im Songtitel vor.
Dann müsste das Auslesen der Textdatei-mit-Songtiteln so angepasst werden:
Und der Batch hätte nur noch ein gutes Dutzend Zeilen...
Oben habe ich auch diese gewünschte Mimik eingebaut;
Geht bestimmt auch kürzer, aber das soll ja nur eine Skizze sein.
Außerdem ist es ja nur ein Gebrauchsbatch und kein qualititätsgeprüftes Stück Software.
Hope That Helps.
Biber
(ein Becks später...)
Hier wäre mal der erste Entwurf:
::----------snipp MP3RenameWithList.bat
@echo off & setlocal
::Parameter1 = Name der Datei mit den Titeln (neue MP3-Namen)
If "%~1"=="" echo (Syntax: %0 MP3Titel-Liste.ext) & goto :eof
If not exist "%~1" (echo Keine Datei "%1" gefunden!) & goto :eof
PUSHD "%~dp1"
for /f "delims=\ tokens=2-10" %%a in ("%cd%") do (
for %%x in ("%%i" "%%h" "%%g" "%%f" "%%e" "%%d" "%%c" "%%b" "%%a") do (
if defined album (if not defined inter set "inter=%%~x" ) else if not defined album set "album=%%~x" ))
SET "MyCD=%INTER%-%ALBUM%" & Set /a "cnt=1"
FOR /F "delims= eol=#" %%a in (%~nx1) do call :RenNext_TitleN.mpg "%myCD%-%%a.mp3"
Popd
pause >nul
goto :eof
:RenNext_TitleN.mpg
ren Title%cnt%.mp3 %1
set /a "cnt+=1"
goto :eof
::----------snapp MP3RenameWithList.bat
Hab ich doch gesagt, dass das keine 20 Zeilen sind...
Ein Test bei mir bringt ( mit "ECHO ren Title%cnt%.mp3 %1" statt "ren Title%cnt%.mp3 %1" natürlich)
$cmd$Mp3RenameWithList.bat "L:\Renametest\3 Doors Down\The better Life\Mp3Titles.txt"
ren Title1.mp3 "3 Doors Down-The better Life-01_Its OK.mp3"
ren Title2.mp3 "3 Doors Down-The better Life-02_Love Wont Wait.mp3"
ren Title3.mp3 "3 Doors Down-The better Life-03_Tide Is High.mp3"
Das Umbenennen macht die drittletzte Zeile unten:
( bei einer Datei Mp3Titles.txt dieser Form
01_Its OK
02_Love Wont Wait
03_Tide Is High
(Ende Textdatei)
ren Title%cnt%.mp3 %1 ------------> ren Title1.Mp3 01_Its OK
Ist allerdings Mehraufwand und tippfehlerträchtig
...(alternative Form der Songtitel-Textdatei)
Titel01.mp3;01_masterfile
Titel02.mp3;02_Sister
Titel03.mp3;03_Southern
...
Die würde ich aber mit Semikolon trennen (kommt weder im bisherigen Dateinamen noch im Songtitel vor.
Dann müsste das Auslesen der Textdatei-mit-Songtiteln so angepasst werden:
FOR /F "tokens=1-2 delims=; eol=#" %%a in (%~nx1) do ren %%a "%myCD%-%%b.mp3"
:: der Call-Block und der Counter %cnt% wären überflüssig
Oben habe ich auch diese gewünschte Mimik eingebaut;
Gibt es möglichkeit den Pfad vom Ende bis Anfang des Pfades zu untesuchen?
Das ist dieser etwas unappetitlich aussehende Drei-Zeilen-Einzeiler nach dem PushD.Geht bestimmt auch kürzer, aber das soll ja nur eine Skizze sein.
Außerdem ist es ja nur ein Gebrauchsbatch und kein qualititätsgeprüftes Stück Software.
Hope That Helps.
Biber
Moin tom,
ja, ja ...mein großes Latinum.. *g
Also, da war tatsächlich noch ein Flüchtigkeitsfehler drin, den ich gestern doch gepostet habe.
In der FOR-Schleife unten darf der Wert in der Klammer KEINE umschließenden Anführungszeichen haben.
FALSCH war: ...in ("%~nx1")...do..
RICHTIGER ist: ...in (%~nx1)...do..
Thats all. Ich korrigier das oben.
[Edit] ... öh, da war nichts zu korrigieren... ich hatte es gestern schon OHNE Anfü-Zeichen gepostet und so läuft es auch heute bei mir.
Der Parameter "vollständiger Pfad zur Songtitel-Datei" wird so gut wie IMMER in Anführungszeichen kommen müssen, außer wenn sowohl "Album" noch "Interpret" aus je einem Wort bestehen. Also bei "K:\Kiss\Kiss\Titles.txt" vielleicht. Aber im Normalfall "f:\The Beatles\Yellow Submarine\Titles.txt" würde sowohl uber CMD.exe wie über Explorer-Kontextmenü in Anfü-Zeichen kommen.
[/Edit]
Zu dem Kontextmenü:
Ich habe es eben quick & dirty in einen neuen Schlüssel
[HKEY_CLASSES_ROOT\*\Shell\] reingetrümmert.
Sprich:
-unter "...\Shell" einen Schlüssel "Mp3Rename" angelegt,
-unter MP3Rename einen Schlüssel "command" angelegt.
- in den leeren Standardwert eingetippt Cmd /c mp3renameWithlist.bat "%1"
Als exportierte *.reg-Datei sieht das so aus:
Geht bestimmt auch anderswo und eleganter, aber zumindest für einen ersten Wurf ist das okay.
Was eventuell noch verfeinert werden kann, ist die Rename-Mimik in den letzen Zeilen.
Da müsstest Du noch mal drüber meditieren, wie die "Song-Titelnamen"-Textdatei aufgebaut sein soll.
So ist es ein bisschen wackelig:
Wenn es nicht Track1...TrackN.mpg gibt, gibt es Fehler.
Heißt: wenn Du mal aus einem Album Track7 und Track9 auslassen willst, weil die nervig sind...-->geht nicht. Die Titel werden von 1..N.. als Mp3 erwartet.
Und: Du kannst hinterher nicht rekonstruieren, ob sich unter dem neuen Datei-Namen "Tide Is High.mpg" auch der richtige Titel verbirgt...siehst ja hinterher nicht mehr mit einem Blick, ob nun Titel2.mpg oder Titel3.mpg diesen neuen Namen erhalten hat.
Die zweite Variante Deiner Songtitel-Datei ist da schon sauberer.
Na ja, wenn Du es optimiert und abgefeilt hast, könntest Du ja mal die Version 2.01 hier posten *gg
Bis dahin
Biber
P.S. Wenn es so erstmal läuft, kannst Du den Beitrag auf gelöst setzen bitte.
ja, ja ...mein großes Latinum.. *g
Also, da war tatsächlich noch ein Flüchtigkeitsfehler drin, den ich gestern doch gepostet habe.
In der FOR-Schleife unten darf der Wert in der Klammer KEINE umschließenden Anführungszeichen haben.
FALSCH war: ...in ("%~nx1")...do..
RICHTIGER ist: ...in (%~nx1)...do..
Thats all. Ich korrigier das oben.
[Edit] ... öh, da war nichts zu korrigieren... ich hatte es gestern schon OHNE Anfü-Zeichen gepostet und so läuft es auch heute bei mir.
Der Parameter "vollständiger Pfad zur Songtitel-Datei" wird so gut wie IMMER in Anführungszeichen kommen müssen, außer wenn sowohl "Album" noch "Interpret" aus je einem Wort bestehen. Also bei "K:\Kiss\Kiss\Titles.txt" vielleicht. Aber im Normalfall "f:\The Beatles\Yellow Submarine\Titles.txt" würde sowohl uber CMD.exe wie über Explorer-Kontextmenü in Anfü-Zeichen kommen.
[/Edit]
Zu dem Kontextmenü:
Ich habe es eben quick & dirty in einen neuen Schlüssel
[HKEY_CLASSES_ROOT\*\Shell\] reingetrümmert.
Sprich:
-unter "...\Shell" einen Schlüssel "Mp3Rename" angelegt,
-unter MP3Rename einen Schlüssel "command" angelegt.
- in den leeren Standardwert eingetippt Cmd /c mp3renameWithlist.bat "%1"
Als exportierte *.reg-Datei sieht das so aus:
;-------------snipp Mp3Rename.reg
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\Shell]
[HKEY_CLASSES_ROOT\*\Shell\Mp3Rename]
@=""
[HKEY_CLASSES_ROOT\*\Shell\Mp3Rename\command]
@="cmd /c mp3renameWithlist.bat \"%1\""
;--------mp3Rename.reg
Geht bestimmt auch anderswo und eleganter, aber zumindest für einen ersten Wurf ist das okay.
Was eventuell noch verfeinert werden kann, ist die Rename-Mimik in den letzen Zeilen.
Da müsstest Du noch mal drüber meditieren, wie die "Song-Titelnamen"-Textdatei aufgebaut sein soll.
So ist es ein bisschen wackelig:
Wenn es nicht Track1...TrackN.mpg gibt, gibt es Fehler.
Heißt: wenn Du mal aus einem Album Track7 und Track9 auslassen willst, weil die nervig sind...-->geht nicht. Die Titel werden von 1..N.. als Mp3 erwartet.
Und: Du kannst hinterher nicht rekonstruieren, ob sich unter dem neuen Datei-Namen "Tide Is High.mpg" auch der richtige Titel verbirgt...siehst ja hinterher nicht mehr mit einem Blick, ob nun Titel2.mpg oder Titel3.mpg diesen neuen Namen erhalten hat.
Die zweite Variante Deiner Songtitel-Datei ist da schon sauberer.
Na ja, wenn Du es optimiert und abgefeilt hast, könntest Du ja mal die Version 2.01 hier posten *gg
Bis dahin
Biber
P.S. Wenn es so erstmal läuft, kannst Du den Beitrag auf gelöst setzen bitte.
@Biber:
Hallo, das mit dem %~dp0 hab Ich genommen, weil Tommy das so beschrieben hatte:
Also bei mir funkt. FOR /F "delims= eol=#" %%a in (artist.txt) do ren "%%a.mp3" "%CD%-%%a.mp3" perfekt, meine Beispiel-MP3's wurden immer richtig umbenannt.
Was stimmt denn da nicht ?
Hab ja schon gesagt, bin nicht so der FOR-Experte, ich bin meistens froh wenn Ichs überhaupt hinkriege!
PS: Find Ich ja klasse, das hier Batch & DOS noch so ausführlich behandelt wird, in den meisten Foren wird da auf Sparflamme gekocht!
my2cents
PCB
Hallo, das mit dem %~dp0 hab Ich genommen, weil Tommy das so beschrieben hatte:
Ich habe for diese Ren.Bat immer in das
verzeichnis zu verschieben, daß
umbenenannt wird, so muß ich nur nach
dem standort der (Künstler -
Atrist.txt) suchen.
verzeichnis zu verschieben, daß
umbenenannt wird, so muß ich nur nach
dem standort der (Künstler -
Atrist.txt) suchen.
Also bei mir funkt. FOR /F "delims= eol=#" %%a in (artist.txt) do ren "%%a.mp3" "%CD%-%%a.mp3" perfekt, meine Beispiel-MP3's wurden immer richtig umbenannt.
Was stimmt denn da nicht ?
Hab ja schon gesagt, bin nicht so der FOR-Experte, ich bin meistens froh wenn Ichs überhaupt hinkriege!
PS: Find Ich ja klasse, das hier Batch & DOS noch so ausführlich behandelt wird, in den meisten Foren wird da auf Sparflamme gekocht!
my2cents
PCB
@PCB
hast ja recht: wenn die *.bat-Datei wirklich jedesmal im verzeichnis mit den MP3s vorliegt, dann geht es auch mit %~dp0.
Nur das wollte ich vermeiden.
Die Renamerei klappt bei Dir, wenn
Vorher: "The Machine.mp3" vorliegt,
>"Pink Floyd - "Wish You Were Here - The Machine.mp3"
Aber das Szenario wäre ja gewesen, dass vorliegt:
Title1.mp3
Title2.mp3
...
Und überhaupt: Du hast Tommy wenigstens am Anfang gleich verstanden - da war ich viel langsamer.
Sollte keine Kritik sein, ohne Deinen Ansatz hätte ich gar nicht so schnell den Zugang gefunden.
Grüße
Biber
hast ja recht: wenn die *.bat-Datei wirklich jedesmal im verzeichnis mit den MP3s vorliegt, dann geht es auch mit %~dp0.
Nur das wollte ich vermeiden.
Die Renamerei klappt bei Dir, wenn
Vorher: "The Machine.mp3" vorliegt,
>"Pink Floyd - "Wish You Were Here - The Machine.mp3"
Aber das Szenario wäre ja gewesen, dass vorliegt:
Title1.mp3
Title2.mp3
...
Und überhaupt: Du hast Tommy wenigstens am Anfang gleich verstanden - da war ich viel langsamer.
Sollte keine Kritik sein, ohne Deinen Ansatz hätte ich gar nicht so schnell den Zugang gefunden.
Grüße
Biber
Sehr schön, TommyC,
das finde ich ein schönes Beispiel für eine gemeinsam entwickelte Lösung hier im Forum.
Eine Anmerkung noch zu der oberen FOR..IN..DO..-Anweisung
Da habe ich geschrieben:
for /f "delims=\ tokens=2-10" %%a in ("%cd%")
das heißt, er dröselt den aktuellen Verzeichnispfad erst ab Token/Ebene 2 auf.
Passt bei allen unseren Beispielen; es ist aber anzumerken, dass der Batch nicht laufen würde, wenn direkt unter Root das Interpret-Verzeichnis liegen würde.
Würde ich auch nie machen oder erwarten, sondern auch alles in einem Unterordner "\Music" oder ähnlich sammeln.
Dennoch: allgemein tauglich wäre die Pfad-Aufroll-FOR-Anweisung so:
for /f "delims=\ tokens=1-9" %%a in ("%cd%") ...
Rest bleibt wie es ist.
Wenn "das Thema gegessen ist", kannst Du bitte den Beitrag auf gelöst setzen.
Ich lasse ihn aber noch offen, falls da noch kosmetische Änderungen oder Erweiterungen oder Varianten kommen. Denke schon, dass diesen Batch einige ausprobieren und anpassen.
Grüße
Biber
das finde ich ein schönes Beispiel für eine gemeinsam entwickelte Lösung hier im Forum.
Eine Anmerkung noch zu der oberen FOR..IN..DO..-Anweisung
Da habe ich geschrieben:
for /f "delims=\ tokens=2-10" %%a in ("%cd%")
das heißt, er dröselt den aktuellen Verzeichnispfad erst ab Token/Ebene 2 auf.
Passt bei allen unseren Beispielen; es ist aber anzumerken, dass der Batch nicht laufen würde, wenn direkt unter Root das Interpret-Verzeichnis liegen würde.
Würde ich auch nie machen oder erwarten, sondern auch alles in einem Unterordner "\Music" oder ähnlich sammeln.
Dennoch: allgemein tauglich wäre die Pfad-Aufroll-FOR-Anweisung so:
for /f "delims=\ tokens=1-9" %%a in ("%cd%") ...
Rest bleibt wie es ist.
Wenn "das Thema gegessen ist", kannst Du bitte den Beitrag auf gelöst setzen.
Ich lasse ihn aber noch offen, falls da noch kosmetische Änderungen oder Erweiterungen oder Varianten kommen. Denke schon, dass diesen Batch einige ausprobieren und anpassen.
Grüße
Biber