Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Batchdatei für Ordnervergleich und anschliessendem Konvertierungsstart

Frage Entwicklung Batch & Shell

Mitglied: SamHell

SamHell (Level 1) - Jetzt verbinden

18.07.2007, aktualisiert 19.07.2007, 2952 Aufrufe, 8 Kommentare

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
Mitglied: bastla
18.07.2007 um 13:33 Uhr
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
Bitte warten ..
Mitglied: miniversum
18.07.2007 um 15:41 Uhr
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:
01.
@echo off  
02.
chcp 1252 >NUL 
03.
set "Ziel=D:\musik" 
04.
set "Quelle=D:\wmas" 
05.
 
06.
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
Bitte warten ..
Mitglied: bastla
18.07.2007 um 16:26 Uhr
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:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "Ziel=D:\musik" 
03.
set "Quelle=D:\wmas" 
04.
xcopy /e /t "%Quelle%" "%Ziel%\" 
05.
for /r "%Quelle%" %%i in (*.wma) do call :ProcessFile "%%i" 
06.
goto :eof 
07.
:ProcessFile 
08.
set "RelPath=%~dp1" 
09.
set "RelPath=!RelPath:%Quelle%\=!" 
10.
if exist "%Ziel%\RelPath%~n1.mp3" goto :eof 
11.
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:
01.
@echo off & setlocal 
02.
set "Ziel=D:\musik" 
03.
set "Quelle=D:\wmas" 
04.
xcopy /e /t "%Quelle%" "%Ziel%\" 
05.
for /r "%Quelle%" %%i in (*.wma) do call :ProcessFile "%%i" 
06.
goto :eof 
07.
:ProcessFile 
08.
set "RelPath=%~dp1" 
09.
set "RelPath=%RelPath:~<b>8</b>%" 
10.
if exist "%Ziel%\RelPath%~n1.mp3" goto :eof 
11.
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.

Grüße
bastla
Bitte warten ..
Mitglied: miniversum
18.07.2007 um 17:08 Uhr
warum nicht so?
01.
@echo off  
02.
chcp 1252 >NUL 
03.
set "Ziel=D:\musik" 
04.
set "Quelle=D:\wmas" 
05.
 
06.
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
Bitte warten ..
Mitglied: bastla
18.07.2007 um 17:16 Uhr
@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
Bitte warten ..
Mitglied: miniversum
19.07.2007 um 11:21 Uhr
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
Bitte warten ..
Mitglied: bastla
19.07.2007 um 11:36 Uhr
@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
Bitte warten ..
Mitglied: miniversum
19.07.2007 um 15:18 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (27)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (20)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...