unicum
Goto Top

Dateien in Unterverzeichnissen konvertieren und kopieren

Hallo Liebe Community,
mit dem Skript unten möchte ich alle FLAC Dateien aus %src_dir%\Interpreter_x\Album_y\Datei_z.flac in
%dest_dir%\Interpreter_x\Album_y\Datei_z.mp3 kopieren/konvertieren.(Interpreter_x, Album_y und Datei_z stehen für beliebige Verzeinisse, Dateien)
Leider landen momentan alle konvertierten MP3 Dateien unter %dest_dir%\Datei_z.mp3
Da ich mich mit String-Operatoren nicht auskenne wollte ich diesbezüglich um Eure Hilfe bitten.
Die Zieldatei wird im letzten Parameter von lame als "%dest_dir%\%%~nx.mp3"festgelegt, das sollte bearbeitet werden.
Vielen Dank für Eure Hilfe im Voraus!
unicum

@echo on
::
set src_dir=g:\test\film
set temp_dir=g:\temp
set dest_dir=d:\archiv
set exedir=g:\test
::
xcopy %src_dir% %dest_dir% /T /E /I
for /r %src_dir% %%x in (dir /b *.flac) do (
%exedir%\flac -d "%%x" -o "%temp_dir%\%%~nx"
%exedir%\lame -V2 "%temp_dir%\%%~nx" "%dest_dir%\%%~nx.mp3"
del "%temp_dir%\%%~nx"
)

Content-Key: 150650

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

Printed on: April 24, 2024 at 12:04 o'clock

Member: bastla
bastla Sep 08, 2010 at 18:39:29 (UTC)
Goto Top
Hallo unicum und willkommen im Forum!

Vielleicht geht es so besser (und sicherer / kontrollierter):
@echo on & setlocal
::
set src_dir=g:\test\film
set temp_dir=g:\temp
set dest_dir=d:\archiv
set exedir=g:\test
::
xcopy "%src_dir%" "%dest_dir%\" /E  
for /r %src_dir% %%x in (*.flac) do (
    "%exedir%\flac" -d "%%x" -o "%temp_dir%\%%~nx"  
    if not errorlevel 1 "%exedir%\lame" -V2 "%temp_dir%\%%~nx" "%dest_dir%\%%~nx.mp3" && del "%temp_dir%\%%~nx"  
)
Falls nicht beide Konvertierungsschritte erfolgreich (mit Errorlevel 0) beendet wurden, bleibt die (kopierte) Ausgangsdatei in "%temp_dir%" erhalten ...

Grüße
bastla

P.S.: Der Sinn der "xcopy"-Option "/T" war mir in diesem Zusammenhang nicht klar, weshalb ich sie weggelassen habe ...
Member: unicum
unicum Sep 08, 2010 at 19:08:55 (UTC)
Goto Top
Servus Bastla,
und danke für deine schnelle Antwort auch dann wenn die keine Lösung für mein Problem ist.
Der Sinn von xcopy "%src_dir%" "%dest_dir%\" /E /T /I war, um die selbe Verzeinissstruktur unter %dest_dir% anzulegen die unter "src_dir" vorhanden ist.
Ich weiss nähmlich nicht ob lame.exe auch Verzeichnisse erzeugt oder nicht (sicher ist sicher). Mit xcopy "%src_dir%" "%dest_dir%\" /E werden alle FLAC-Dateien rüberkopiert, was ich definitiv nicht will.

Leider das Skript arbeitet wie früher also alle MP3 Dateien landen im %dest_dir% und nicht in den Unterverzeichnissen (unter %dest_dir%) die mit xcopy erzeugt wurden.
gruss,unicum
Member: bastla
bastla Sep 08, 2010 at 19:29:29 (UTC)
Goto Top
Hallo unicum!

Sorry - da war ich zwar schnell, aber ziemlich auf dem Holzweg ... face-sad

Versuch es damit:
@echo on & setlocal
::
set src_dir=g:\test\film
set temp_dir=g:\temp
set dest_dir=d:\archiv
set exedir=g:\test
::
echo xcopy "%src_dir%" "%dest_dir%\" /T /E  
for /r "%src_dir%" %%x in (*.flac) do set "Full=%%~dpnx" & call :ProcessFile "%%x"  
goto :eof

:ProcessFile
call set "Rel=%%Full:%src_dir%\=%%"  
"%exedir%\flac" -d %1 -o "%temp_dir%\%~n1"  
if not errorlevel 1 "%exedir%\lame" -V2 "%temp_dir%\%~n1" "%dest_dir%\%Rel%.mp3" && del "%temp_dir%\%~n1"  
goto :eof
Grüße
bastla
Mitglied: 77559
77559 Sep 08, 2010 at 19:33:41 (UTC)
Goto Top
Hallo unicum,
weder dein noch bastlas Batch berüchsichtigt den kompletten aktuellen Pfad,
diese ungetestete Version tut es:

@echo on & setlocal
::
set src_dir=g:\test\film
set temp_dir=g:\temp
set dest_dir=d:\archiv
set exedir=g:\test
::
for /r %src_dir% %%x in (*.flac) do Call :Proc "%%~fx"  
Pause
Goto :Eof
:Proc
Set "FlacPath=%~dp1"  
Call Set "MpgPath=%%FlacPath:%src_dir%=%dest_dir%%%"  
"%exedir%\flac" -d %1 -o "%temp_dir%\%~n1"  
if not errorlevel 1 "%exedir%\lame" -V2 "%temp_dir%\%~n1" "%MpgPath%%~n1.mp3" && del "%temp_dir%\%~n1"  

Gruß
LotPings

EDit: Danke für den Hinweis batsla, habs geändert.
Member: bastla
bastla Sep 08, 2010 at 19:39:32 (UTC)
Goto Top
Hallo LotPings!

Ich hatte zwar die Leitung, auf der ich gestanden hatte, inzwischen auch wieder verlassen, aber die direkte Ersetzung von "%src_dir%" durch "%dest_dir%" ist natürlich eleganter ... face-smile

... allerdings wird's in ":Proc" mit "%%~nx" nicht ganz so gut klappen ...

Grüße
bastla
Member: unicum
unicum Sep 09, 2010 at 17:40:58 (UTC)
Goto Top
Hallo LotPings, hallo bastla,
ich habe noch in LotPings`s Skript die Zeile
Call Set "MpgPath=%%FlacPath:%src_dir%=%dest_dir%%%"
mit dem roten % ergänzt und nun funktionieren beide Skripten. Vielen Dank für eure Hilfe!!
weder dein noch bastlas Batch berüchsichtigt den kompletten aktuellen Pfad,
Wirkt das irgendwo aus? Momentan tun beide Skripten das selbe.
Nochmals danke euch Beiden!
gruss,unicum
PS.:die xcopy Zeile ist nötig weil lame.exe keine Verzeichnisse erzeugen kann.
Mitglied: 77559
77559 Sep 09, 2010 at 17:50:12 (UTC)
Goto Top
Zitat von @unicum:
Hallo LotPings, hallo bastla,
ich habe noch in LotPings`s Skript die Zeile
Call Set "MpgPath=%%FlacPath:%src_dir%=%dest_dir%%%"
mit dem roten % ergänzt und nun funktionieren beide Skripten. Vielen Dank für eure Hilfe!!
Sorry, weiss nicht wo das % abhanden gekommen ist face-wink
> weder dein noch bastlas Batch berüchsichtigt den kompletten aktuellen Pfad,
Wirkt das irgendwo aus? Momentan tun beide Skripten das selbe.
Du musst auf die Zeiten achten, das bezog sich auf bastlas ersten Batch, den zweiten 4 min vor meinem gepostet konnte ich beim Schreiben noch nicht sehen.
Nochmals danke euch Beiden!
Gerne

Gruß
LotPings