http://dieseyer.de • all rights reserved • © 2011 v11.4

'v5.1*****************************************************
' File: mp3-bitrate-change2.vbs
' Autor: dieseyer@gmx.de
' dieseyer.de
'
' Wandelt alle mp3-Dateien im aktuellen Ordner und seinen
' Unterordnern in Dateien mit einer BitRate von xxx k um.
'
' Dazu am Besten die VBS auf den Desktop (und c:\lame.exe)
' ablegen, den (Windows-) Explorer nicht! im Volbild-Modus
' starten und die Verzeichnisse mit der Maus auf die VBS
' ziehen und fallen lassen . . .
'
' Die Dateinamen der ALTEN Dateien enden mit ".mp3-"
'*********************************************************

Option Explicit

Dim Song, Artist
Dim Text, Text1, Text2, index, Txt(), i1, i2, newpath
Dim fso, fo, fi, FileOut
Dim LameExe, LameParam, ZielVerz, Ziel, Quelle, WSHShell

Dim oArgs, Verz, BitRate, BitRatOrigMin

Set WSHShell = WScript.CreateObject("WScript.Shell")
Set fso = WScript.CreateObject("Scripting.FileSystemObject")

LameExe = "c:\lame.exe"
LameExe = "F:\audiograbber\lame-3.96\lame.exe"

If not (fso.FileExists(LameExe)) Then
MsgBox """" & UCase(LameExe) & """ nicht vorhanden!", , WScript.ScriptName
WScript.Quit
End If

BitRate = 128

set oArgs = Wscript.Arguments ' hole Argumentsauflistung
If oArgs.Count > 0 Then ' Ja, hole Name
Verz = """" & oArgs.item(0) & """" ' erster Parameter
Verz = oArgs.item(0) ' erster Parameter
Else
Text = "Das Ganze funktioniert so:" & vbCRLF & vbCRLF
Text = Text & "Mit der Maus ein Verzeichnis mit mp3-Dateien" & vbCRLF
Text = Text & "auf das Skript ziehen und fallen lassen - JETZT" & vbCRLF
Text = Text & "werden alle gefundenen mp3-Dateien in Dateien " & vbCRLF
Text = Text & "mit " & BitRate & "k BitRate um-en-codiert. Die ALTEN Dateien" & vbCRLF
Text = Text & "enden dann mit "".mp3- . . . """ & vbCRLF
MsgBox Text, , WScript.ScriptName
WScript.Quit
End If

BitRate = InputBox ("In welche Bitrate sollen die mp3-Dateien" & vbCRLF & vbCRLF & "gewandelt werden?", WScript.ScriptName, BitRate)
If Bitrate = "" then WScript.Quit

i2 = 0
Text = ""


VerzMP3change( Verz )

Dim oFolders : Set oFolders = fso.GetFolder( Verz )
Dim oSubFolder : Set oSubFolder = oFolders.SubFolders
Dim VerzX
For Each VerzX In oSubFolder

VerzMP3change( VerzX.Path )

Next

If i2 = 0 then LogDatei "Es wurden keine Dateien zum Wandeln gefunden."

WSHShell.Run WScript.ScriptName & ".log"

MsgBox "das wars"
WScript.Quit



'*********************************************************
Sub VerzMP3change( Verz )
'*********************************************************

Set fo = fso.GetFolder( Verz )
Set fi = fo.Files ' Datei-Auflistung holen

For Each i1 In fi ' hole Liste aller Dateien

if Ucase(Right(i1.name,4)) = ".MP3" then ' hole nur mp3 - Dateien

Quelle = Verz & "\" & i1.Name & "-"
Ziel = Verz & "\" & i1.Name

if fso.FileExists(Ziel) then ' wenn es eine .mp3- - Datei
if fso.GetFile(Ziel).Size = 0 then ' mit 0 Byte Größe gibt
fso.DeleteFile(Ziel), True ' wird diese gelöscht
WSHShell.Popup "0 Byte große Datei " & Ziel & " wurde gelöscht", 3, WScript.ScriptName
End If
End If

if not fso.FileExists(Quelle) then
Set Text1 = fso.GetFile(Ziel)
Text1.Move Quelle
End If

if not fso.GetFile(Quelle).Size < fso.GetDrive(Left(Quelle,3)).AvailableSpace then
MsgBox "Auf " & Verz & " steht nicht genügend Platz zur Verfügung!", , WScript.ScriptName
WScript.Quit ' wenn weniger als die Größe der Quelle-Datei auf
End If ' dem Ziellaufwerk frei ist - Abbruch

if not FSO.FileExists(Ziel) then ' wenn es noch keine -??????.mp3-Datei gibt

' LameParam = "cmd /k " & LameExe & " -b " & BitRate & " -h --mp3input """ & Quelle & """ """ & Ziel & """"
LameParam = LameExe & " -b " & BitRate & " -h --mp3input """ & Quelle & """ """ & Ziel & """"
LogDatei ( LameParam )
WSHShell.Run LameParam , , True

i2 = i2+1
Text = "(" & i2 & ") " & vbTab & "... ~" & Ziel & vbCRLF
LogDatei ( Text )
End If
End If
Next

Set fi = Nothing
Set fo = Nothing

End Sub ' VerzMP3change( Verz )


'**************************************************************
Sub LogDatei (LogTxt) ' v3.9 - http://dieseyer.de
'**************************************************************
Dim fso, File, FileOut
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
' File = fso.GetBaseName( WScript.ScriptName ) & ".log"
File = WScript.ScriptName & ".log"
Set FileOut = fso.OpenTextFile( File , 8, true)
' FileOut.WriteLine (vbCRLF & Now() )
FileOut.WriteLine (LogTxt)
FileOut.Close
Set FileOut = Nothing
Set fso = Nothing
End Sub ' LogDatei (LogTxt) ' v3.9 - http://dieseyer.de
'**************************************************************

http://dieseyer.de • all rights reserved • © 2011 v11.4