samhell
Goto Top

Batchdatei für Ordnervergleich und anschliessendem Konvertierungsstart

Hallo zusammen!

Aus dem Titel ist es schon teilweise ersichtlich, aber erstmal zur Vorgeschichte:
Ich habe einen Bekannten der eine umfangreiche wma-audiosammlung auf seinem
PC hat. Dieser jemand ist leider sowohl körperlich als auch geistig insoweit beeinträchtigt
das ich ihm seinen PC so eingerichtet habe das er damit mit möglichst wenig klicks
mit dem nötigsten arbeiten kann.

Nun hat er sich einen MP3-Player gekauft der sehr einfach zu bedienen ist, und den er lieb
gewonnen hat, nun spielt dieser allerdings nur mp3´s ab.


In kurz:
Ich habe eine Batchdatei geschrieben, die im WMA-Ordner die wma´s per
converter zu mp3 konvertiert, und diese in einen anderen Ordner verschiebt.

Dabei stoße ich auf 2 Probleme:
- die Unterverzeichnisse werden bei "convert *.wma D:\musik\*mp3" nicht durchsucht.
- und da das bei der Sammlung bei jeder aktualisierung unglaublich lange dauern würde, wäre eine Quellenabfrage nach "if ´ausgabefile schon da´ dann kein convert" nötig


Dazu die Frage: ist das per batch überhaupt möglich, oder is das schon zu komplex
und würde VB oder ähnliches benötigen?


Für etwaige Tips oder Denkanstöße wäre ich überaus dankbar face-smile

Nico

Content-Key: 64097

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

Printed on: April 25, 2024 at 10:04 o'clock

Member: bastla
bastla Jul 18, 2007 at 11:33:26 (UTC)
Goto Top
Hallo SamHell und willkommen im Forum!

Vielleicht vorweg: Das wird sich auf jeden Fall mit Batch lösen lassen (wobei vielleicht Dateien/Pfade mit enthaltenem "!" problematisch sein könnten).

Was Du noch etwas genauer beschreiben könntest, ist die Ordnerstruktur. Die .wma-Dateien befinden sich, soweit ich das richtig verstanden habe, in verschiedenen Ordnern. Vermutlich soll dies auch für die erstellten .mp3 gelten - richtig? Am Besten gibst Du gleich die konkreten Pfade an.

Auch die Optionen des verwendeten Konverters wären interessant (vor allem: Pfadangaben für Ein- und Ausgabedateien möglich?).

Grüße
bastla
Member: miniversum
miniversum Jul 18, 2007 at 13:41:06 (UTC)
Goto Top
wenn du eine datei folgendermasen convertierst:
convert datei.wma D:\musik\datei.mp3
dann würde das ganze in einer Schleife für mehrere Dateien im Verzeichnis "Quelle" der Batch und deren Unterverzeichnisse so gehen:
@echo off 
chcp 1252 >NUL
set "Ziel=D:\musik"  
set "Quelle=D:\wmas"  

FOR /F "delims=" %%A in ('dir /b /s %Quelle%') do if not exist "%Ziel%\%%~nA.mp3" (convert "%%A" "%Ziel%\%%~nA.mp3")  

Wird beim Quelle nichts angegeben, also "Quelle=" wird im Verzeichniss der Batch und deren Unterverzeichnisse gesucht.

miniversum
Member: bastla
bastla Jul 18, 2007 at 14:26:43 (UTC)
Goto Top
Hallo SamHell und miniversum!

Um die Verzeichnisstruktur auch für die .mp3-Dateien zu erhalten, könnte es (in Anlehnung an miniversum's Beispielpfade) so gehen:
@echo off & setlocal enabledelayedexpansion
set "Ziel=D:\musik"  
set "Quelle=D:\wmas"  
xcopy /e /t "%Quelle%" "%Ziel%\"  
for /r "%Quelle%" %%i in (*.wma) do call :ProcessFile "%%i"  
goto :eof
:ProcessFile
set "RelPath=%~dp1"  
set "RelPath=!RelPath:%Quelle%\=!"  
if exist "%Ziel%\RelPath%~n1.mp3" goto :eof  
echo convert %1 "%Ziel%\%RelPath%%~n1.mp3"  
Das "echo" vor dem "convert" sorgt dafür, dass der Konvertierungsvorgang durch die Bildschirmausgabe (mit den beiden Pfaden) simuliert wird.

Leider gilt die oben bereits angeführte Einschränkung hinsichtlich der Pfade/Dateien mit "!" - diese werden nicht verarbeitet. Ein (allerdings äußerst unschöner) Workaraound wäre folgende Variante:
@echo off & setlocal
set "Ziel=D:\musik"  
set "Quelle=D:\wmas"  
xcopy /e /t "%Quelle%" "%Ziel%\"  
for /r "%Quelle%" %%i in (*.wma) do call :ProcessFile "%%i"  
goto :eof
:ProcessFile
set "RelPath=%~dp1"  
set "RelPath=%RelPath:~<b>8</b>%"  
if exist "%Ziel%\RelPath%~n1.mp3" goto :eof  
echo convert %1 "%Ziel%\%RelPath%%~n1.mp3"  
Die markierte Zahl 8 entspricht der Länge des Quellpfades (D:\wmas) + 1 und müsste vorweg von Hand eingetragen werden. face-sad

Grüße
bastla
Member: miniversum
miniversum Jul 18, 2007 at 15:08:59 (UTC)
Goto Top
warum nicht so?
@echo off 
chcp 1252 >NUL
set "Ziel=D:\musik"  
set "Quelle=D:\wmas"  

FOR /F "delims=" %%A in ('dir /b /s %Quelle%') do if not exist "%Ziel%\%%~nA.mp3" (md %Ziel%\%%~pA 2>NUL & convert "%%A" "%Ziel%\%%~nA.mp3")  
ist zwar nicht ganz so schön aber geht.

miniversum
Member: bastla
bastla Jul 18, 2007 at 15:16:50 (UTC)
Goto Top
@miniversum

Genau genommen entspricht das aber nur dann einem relativen Pfad, wenn der Quellpfad ein Root-Directory ist.

Abgesehen davon müsstest Du den Pfad dann auch beim "if exist" und beim "convert"-Befehl angeben.

Grüße
bastla
Member: miniversum
miniversum Jul 19, 2007 at 09:21:52 (UTC)
Goto Top
Ok war vielleicht etwas unüberlegt und auf die schnelle.
Dachte halt ohne ! würdds gehen. Ich habe bei mir Zuhause ne Batch die auch mp3s verarbeiten und Kopieren soll. Dort habe Umlaute und ! berücksichtigt. deshalb auch das chcp 1252 >NUL in meinem code.

miniversum
Member: bastla
bastla Jul 19, 2007 at 09:36:21 (UTC)
Goto Top
@miniversum

Das "chcp 1252" hätte ich eigentlich nicht für nötig erachtet, da sich ja ohnehin der ganze Vorgang in Batch abspielt - auch ein Umlaut müsste eigentlich beim Lesen und wieder Schreiben eines Dateinamens gleich bleiben. Schwierigkeiten machen die Umlaute ja eigentlich nur, wenn sie in der Batchdatei selbst vorkommen und der Batch unter Windows (ANSI) erstellt wurde ...
Wie hast Du das übrigens mit dem "!" gelöst? Mir würde auf die Schnelle eigentlich nur eine vorgeschaltete Batchdatei (ohne "delayedexpansion") zum Ersetzen des "!" durch irgend ein ausgefallenes Zeichen und ein weiterer Batch hinterher zum Zurückverwandeln einfallen ...

Unter anderem solche kleinen Ärgernisse sind es jedenfalls, die mich in derartigen Fällen dann meist doch dazu bringen, VBS zu verwenden.

Grüße
bastla
Member: miniversum
miniversum Jul 19, 2007 at 13:18:23 (UTC)
Goto Top
naja ichhabe so ein Problem nicht. ich verarbeite da jedes Verzeichniss einzeln. (also mit pushd und popd). Da hab ich dann keine relativen Verzeichnisse mehr für das Ziel.
Den aufruf mache ich mit einem call auf ne "Unterfunktion". Ich dachte auch erst es ginge ohne "chcp 1252". Aber es kommt eine Datei drin vor dieich auslese mit Dateinamen. Diese Dateinamen enthalten umlaute und !.

miniversum