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