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
Nico
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
Nico
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 64097
Url: https://administrator.de/forum/batchdatei-fuer-ordnervergleich-und-anschliessendem-konvertierungsstart-64097.html
Ausgedruckt am: 15.05.2025 um 19:05 Uhr
8 Kommentare
Neuester Kommentar
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
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
wenn du eine datei folgendermasen convertierst:
Wird beim Quelle nichts angegeben, also "Quelle=" wird im Verzeichniss der Batch und deren Unterverzeichnisse gesucht.
miniversum
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
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:
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:
Die markierte Zahl 8 entspricht der Länge des Quellpfades (D:\wmas) + 1 und müsste vorweg von Hand eingetragen werden. 
Grüße
bastla
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"
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"
Grüße
bastla
@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
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
@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
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
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
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