ralfste
Goto Top

Dateien Umbenennen mit BAT oder VBS

Hi zusammen,
Ich habe hier einige Verzeichnisse mit *.mp3 bei denen ich die Dateien am liebsten per VBS Umbenennen möchte.
Es sollen von den *.mp3 Dateien die jeweils ersten 3 bis 6 Zeichen mit Hilfe einer Messagebox "Abgeschnitten" werden. Ich bin schon seit mehreren Tagen am googlen, dreh mich aber im Kreis und finde nichts. Es geht also darum die Nummerierung die immer wieder anders ist (01 , 03 - , 04, #05-, 6--, aa , u.s.w.) vor dem Interpreten Abzuschneiden.

Der VBScript oder der DOS-Batch soll in das Verzeichnis Kopiert werden (per Hand) und dort (per doppelklick) ausgeführt werden. Es ist also nicht immer ein Fester Verzeichnisname.

Es Existieren bereits zwei Dateien (Tracklist.txt und Playlist.m3u) mit (Verz.Name - Tracklist.txt) und ohne (Verz.Name - Playlist.m3u) Nummerierung. Diese sollen auch bestehen bleiben.

Ein Externes Programm wie Joe oder swFNP oder ähnliches kommt nicht in Frage da dieser Script auf Verschiedenen Rechnern laufen soll (alle min. Win2000).

Eine VBS Lösung würde ich Vorziehen, da ich zum Erstellen der Tracklist und Playlist bereits eine VBA Lösung habe. Beide Scripte würde ich dann in Zukunft zu einer Zusammenziehen. Momentan bin ich aber schon froh wenn ich das ohne Externes Programm überhaupt gebacken bekomme.

Bin für jede Lösung, Idee, Link oder Ansatz dankbar, bzw ist das überhaupt machbar?

Ralf

Content-Key: 27720

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

Printed on: April 18, 2024 at 00:04 o'clock

Member: TobiasNYC
TobiasNYC Mar 08, 2006 at 19:01:38 (UTC)
Goto Top
Probiere doch mal den TotalCommander, ist sogar Free- oder Shareware.
Darin enthalten ist auch ein Mehrfach-Umbenenn-Tool (Menü: > Dateien > Mehrfach-Umbenenn-Tool)
Member: RalfSte
RalfSte Mar 08, 2006 at 19:47:48 (UTC)
Goto Top
Hi Tobias,
Du Verstehst das Problem nicht.
Tools die diese Aufgabe erledigen gibt's Haufenweise. Das weiß ich selbst.
Aber Irgendwie Erledigen diese Tools die Aufgabe auch.
Ich möchte dieses nun aber mit einem VBS oder einem DOS Script erledigen.
Das dieses nicht leicht wird, ist mir auch bewußt, aber genau darin liegt doch die Herausforderung.
Oder bin ich der erste der über etwas stolpert das mit VBS nicht möglich ist?
Dabei war so ziemlich das erste was ich über VBS gelesen hab das damit alles möglich sei.

Nur wie???

Ralf
Member: Biber
Biber Mar 08, 2006 at 19:53:31 (UTC)
Goto Top
Moin Ralf,

nun werde erst mal ruhiger.. ist sowohl mit Batch wie VBS alles lösbar.. aber die Anforderung ist mir nur teilweise einleuchtend. Würde ich gern vorher klären.

Der VBScript oder der DOS-Batch soll in das Verzeichnis Kopiert werden (per Hand)
Warum datt denn??? Reicht doch, wenn der batch/der VB-Schnipsel auf dieses Verzeichnis angewendet werden würde? Wer löscht denn die 27394 Kopien von FormatPlaylist.bat oder FormatPlaylist.vbs wieder aus allen Unterverzeichnissen?? Du??

und dort (per doppelklick) ausgeführt werden.
Öhmm... wäre es dann nicht sinnvoller, in den Explorer einen zusätzlichen Befehl in das Kontextmenü für das Verzeichnis einzutragen?
Es ist also nicht immer ein Fenster Verzeichnisname.
Selbst das wäre aber zumutbarer..

Es Existieren bereits zwei Dateien (Tracklist.txt und Playlist.m3u)
mit (Verz.Name - Tracklist.txt) und
ohne (Verz.Name - Playlist.m3u) Nummerierung.
Okay...
Diese sollen auch bestehen bleiben.
ööööhm... wenn die so bestehen bleiben, stimmen doch aber die Dateinamen nicht überein, oder überseh ich etwas?

Wenn Du es in Dein VBA-Krams einfügen willst, wäre es schon das Sinnvollste, wenn Du die relevanten Codeschnipsel hier postest, denn das Glattziehen und Umbenennen der *.mp3's sollt ja schon VOR der dem Schreiben der Tracklist/PlayList erfolgen IMHO.

Außerdem - wenn Du hier Deine Codeschnipsel postest, ersparst Du Dir solche Antworten wie "Nimm doch den TotalCommander.." face-wink

Gruß Biber
Member: TobiasNYC
TobiasNYC Mar 08, 2006 at 20:24:55 (UTC)
Goto Top
Verständnis kann man nur anhand von einleuchtenden Informationen aufbauen.
Warum einfach wenn´s auch kompliziert geht, dachte ich zu Anfang, aber anscheinend hast Du sehr präzise Vorstellung deines Vorhabens.

Leider bin ich kein VBS Experte, deshalb entschuldige ich mich für meine Kommentare. . . .sorry
Member: RalfSte
RalfSte Mar 08, 2006 at 21:33:47 (UTC)
Goto Top
Hi Biber,
Folgende Situation:
Bisher habe ich einfach per *.bat eine Tracklist erstellt die ich danach in einem Editot (ConTEXT) Bearbeitet hab um diees als Playlist.m3u Abzuspeichern.
Danach habe ich ein Filerenamer (swFNP) eingesetzt um die *.mp3 der Playlist entsprechend anzupassen.
Wie Du sicherlich schon bemerkt hast, doch ein wenig Primitiv.
nun habe ich (mit viel Hilfe) ein VBS das mir die Schritte Playlist.m3u sowie Tracklist.txt mit davorstehendem Verzeichnisnamen abnimmt.
Mein Grundgedanke ist der das die *.mp3 den Namen bekommen sollen der auch in der Playlist.m3u steht um nicht das Programm einsetzen zu müssen.
Währ meiner meinung nach die Krönung (oder das i Tüpfelchen) vom machbaren.
Hier nun aber erst mal der VBScript wie er momentan aussieht:


Set oFso = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFso.GetFolder(".")
Set oFiles = oFolder.Files

Dim MP3s(), n

n = 0
For Each oFile in oFiles
If LCase(Right(oFile,4))=".mp3" Then
ReDim Preserve MP3s(n)
MP3s(n) = oFile.Name
n = n+1
End If
Next

If n>0 Then
AbZeichen = 1 + InputBox("Es wurden " & n & " .mp3 Dateien gefunden. Wieviele Zeichen sollen jeweils vom Anfang weggeschnitten werden?",,0)
If AbZeichen < 1 Then AbZeichen = 1

quicksort MP3s, 0, n-1

sPlaylist = oFso.getbasename(oFso.getparentfoldername(wscript.scriptfullname)) & " - Playlist.m3u"
sTracklist = oFso.getbasename(oFso.getparentfoldername(wscript.scriptfullname)) & " - Tracklist.txt"

Set o=oFso.opentextfile(sPlaylist,2,true)
For i = 0 to n-1
o.writeline Mid(MP3s(i),AbZeichen)
Next
o.close

Set o=oFso.opentextfile(sTracklist,2,true)
For i = 0 to n-1
o.writeline Mid(MP3s(i),1) 'hier kann man bei Bedarf auch noch was löschen
Next
o.close

MsgBox "Es wurden " & n & " .mp3 Dateien gefunden!"
Else
MsgBox "Es wurden keine MP3s gefunden!"
End If

Sub quicksort (mArray, FromPos, ToPos)
i = FromPos
j = ToPos
p = mArray((i+j)/2)
Do
For i = i to j
If StrComp(mArray(i), p, 1) >= 0 Then Exit For
Next
For j = j to i step -1
If StrComp(mArray(j), p, 1) <= 0 Then Exit For
Next
If i <= j Then
t = mArray(i)
mArray(i) = mArray(j)
mArray(j) = t
i = i+1
j = j-1
End if
Loop Until i > j
If FromPos < j Then quicksort mArray, FromPos, j
If ToPos > i Then quicksort mArray, i, ToPos
End Sub


Der Script soll "zu Fuß" in das Entsprechende Verzeichnis kopiert werden und nach der Kontrolle (Tracklist steht alles drinn? und Playlist Spielt alles? auch manuel wieder gelöscht werden. Frag Bitte nicht warum, ist einfach so. Ich bin da etwas Altmodisch eingestellt, bin aber Bereit mir alle anderen Vorschläge anzuschauen und mich überzeugen zu lassen. Der Manuelle Weg ist aber erst mal Grundvoraussetzung.

Um mich nicht allzuhäufig zu wiederhohlen, Probiers einfach aus, und Du wirst das Problem sofort erkennen.

Da ich in sachen VBS noch in den Kinderschuhen stecke,bin ich also auf Hilfe, möglichst Kommentiert angewiesen. Sonst hab ich das Ding erst einigermaßen zum laufen wenn schon wieder Geschenke unterm Baum liegen...

Ralf
Mitglied: 16568
16568 Mar 08, 2006 at 21:37:00 (UTC)
Goto Top
Da stimme ich Dir zu: VBS ist genauso wie Batch sehr mächtig face-big-smile


Lonesome Walker
Member: RalfSte
RalfSte Mar 10, 2006 at 08:29:54 (UTC)
Goto Top
Hallo Zusammen,
hat denn wirklich niemand eine Idee wie ich das Vorhaben mit VBS oder BAT lösen könnte?
Kann doch gar nicht sein das es gar nicht geht.

Ralf
Mitglied: 16568
16568 Mar 10, 2006 at 10:04:41 (UTC)
Goto Top
Mkay, dann frage ich jetzt mal genauer:

Was willst Du?
Du willst, das irgendwie ein VB-Script (oder Batch) irgendwas von einer Datei "wegschneidet".
Ist das immer gleich viel, was er wegschneiden soll?

Wie Biber oben schon erwähnt hat, wäre es viel einfacher, das Script in das Kontext-Menü zu integrieren; dann mußt Du nur auf den Ordner klicken, und dann frägt er Dich:

"Es wurden " & n & " .mp3 Dateien gefunden. Wieviele Zeichen sollen jeweils vom Anfang weggeschnitten werden?"  

Zusätzlich erstellt es Dir eine Tracklist.txt und einePlaylist.m3u im Anschluß face-big-smile


Lonesome Walker
PS: Ich nutze für so eklige Sachen wie Musikverwaltung gerne Musicmatch; kostet 20,- ?uroen, macht aber die ganze Arbeit binnen 10 Sekunden...
(jaaaaaa, ich weiß, ich soll keine Schleichwerbung machen, und Geld ausgeben will ja nie jemand..)
Member: RalfSte
RalfSte Mar 10, 2006 at 12:03:36 (UTC)
Goto Top
Hi Lonesome Walker.
ich Versuch mal zu Antworten.

Mkay, dann frage ich jetzt mal genauer:

Was willst Du?
Du willst, das irgendwie ein VB-Script (oder Batch) irgendwas von einer
Datei "wegschneidet".
!!! Ja, genau das will ich. Und zwar am Anfang des Dateinamens.

Ist das immer gleich viel, was er wegschneiden soll?
!!! Nein, es können min.3 Zeichen bis zu wasweisichwieviel Zeichen sein.

Wie Biber oben schon erwähnt hat, wäre es viel einfacher, das Script in das Kontext-Menü
zu integrieren; dann mußt Du nur auf den Ordner klicken, und dann frägt er Dich:
"Es wurden " & n & " .mp3 Dateien gefunden. Wieviele Zeichen sollen jeweils vom Anfang
weggeschnitten werden?"
!!! OK, damit könnte ich mich auch anfreunden. Klingt Interrisant. Bisher habe ich mir auch schon x-rename angeschaut, ist aber nicht für diesen Zweck geeignet.

Zusätzlich erstellt es Dir eine Tracklist.txt und einePlaylist.m3u im Anschluß
!!!Das währe dann selbstverständlich, aber die Tracklist.txt mit vorstehendem Verzeichnisnamen und der Nummerierung wie es vor dem Kürzen steht.
Eben genau so wie es der Script oben macht.

Ist das Machbar?

Ralf
Mitglied: 16568
16568 Mar 10, 2006 at 13:01:44 (UTC)
Goto Top
Öhm, langsam:

die Tracklist soll den gesamten Pfad und die alten Dateinamen enthalten?


Alles andere ist machbar; ich guck grade mal face-big-smile


Lonesome Walker
PS: Erwarte aber keine Antwort vor 23:00 Uhr; ich guck' hier nur gelegentlich rein.
Sowas muß ich schreiben, wenn ich ma Freizeit hab ^^
Member: RalfSte
RalfSte Mar 10, 2006 at 19:58:52 (UTC)
Goto Top
die Tracklist soll den gesamten Pfad und die alten Dateinamen enthalten?

NEIN!!!
Nicht das wir uns Falsch Verstehen.
Die Tracklist soll den Namen des Verzeichnisses haben, einen Bindestrich und dann Tracklist.txt oder Playlist.m3u
Also z.B.
Nena - Wunder Geschehn - Tracklist.txt
und
Nena - Wunder Geschehn - Playlist.m3u
Vollständiger Verzeichnispfad ist z.B. C:\ Eigene Dateien\Eigene Musik\Nena\Nena - Wunder Geschehn
oder aber z.B. D:\Mucke\Nena - Wunder Geschehn
oder sonstwo auf den Festplatten (Partitionen).

Die Einzeltitel sollen in der Tracklist Nummeriert sein wie vor der Änderung der Einzeltitel,
und die Playlist soll nur Interpret und Titel auswerfen.

Der Script oben schaft dieses.
Danke für Deine Hilfe.

Ralf
Member: RalfSte
RalfSte Mar 17, 2006 at 08:38:28 (UTC)
Goto Top
Hallo zusammen,
da ich mit meinem Problem leider immer noch nicht weiter bin, wollt ich mich noch mal in Erinnerung bringen.

Hat von Euch inzwischen jemand eine Idee um mein Vorhaben zu Verwirklichen???

Ralf
Member: Biber
Biber Mar 18, 2006 at 15:36:50 (UTC)
Goto Top
Moin RalfSte,

ich bin immer noch nicht ganz sicher, ob ich Deine Anforderung verstehe.
Jedenfalls verstehe ich nicht so recht die Schwierigkeit der Aufgabe.
Ich bin nun nicht der VBS-Crack, aber selbst wenn ich den Umweg über einen VBS-Schnipsel gehe statt es mit zwei,drei Batchzeilen zu machen, halte ich für lösbar (oder habe es eben nicht verstanden).

Deshalb nochmal an einem schnellen Beispiel. Wenn ich ein Verzeichnis "Z:\Lena - Wunden geschehen" habe mit folgenden *.mp3's

$cmd$dir /b *.mp3
03 - Lena Ich sing noch mehr.mp3
04 - Lena Bin ganz heiser.mp3
#08 - Lenas Papa - Summt mit.mp3
17 Hans Wurst - Nochn Song.mp3
11---Hans Wurst - Ein Song.mp3
aaHansiWurst DrittSong.mp3
02 - Lena Ich singe mehr.mp3
01 - Lena Ich singe was.mp3

...und ich jage den unten geposteten Schnipsel drüber
Z:\Lena - Wunden geschehen>
$cmd$cscript //nologo z:\Mp3List.vbs

--> dann erhalte ich
(--Inhalt "Lena - Wunden geschehen - Playlist.m3u")
Lenas Papa - Summt mit.mp3
Lena Ich singe was.mp3
Lena Ich singe mehr.mp3
Lena Ich sing noch mehr.mp3
Lena Bin ganz heiser.mp3
Hans Wurst - Ein Song.mp3
Hans Wurst - Nochn Song.mp3
HansiWurst DrittSong.mp3

..und
(--Inhalt "Lena - Wunden geschehen - Tracklist.txt")
#08 - Lenas Papa - Summt mit.mp3
01 - Lena Ich singe was.mp3
02 - Lena Ich singe mehr.mp3
03 - Lena Ich sing noch mehr.mp3
04 - Lena Bin ganz heiser.mp3
11---Hans Wurst - Ein Song.mp3
17 Hans Wurst - Nochn Song.mp3
aaHansiWurst DrittSong.mp3

Ist das so das, was Du meintest?
Sonst ändere an diesem Beispiel bitte noch mal den SOLL-Output.

Der angepasste Schnipsel:
'-------snipp Mp3List.vbs
Set oFso = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFso.GetFolder(".")
Set oFiles = oFolder.Files

Dim MP3s(), n

n = 0
For Each oFile in oFiles
If LCase(Right(oFile,4))=".mp3" Then
ReDim Preserve MP3s(n)
MP3s(n) = oFile.Name
n = n+1
End If
Next

If n=0 Then
MsgBox "Es wurden keine MP3s gefunden!"
quit
End if

quicksort MP3s, 0, n-1
sPlaylist = oFolder.Name & " - Playlist.m3u"
sTracklist = oFolder.Name & " - Tracklist.txt"

Set oP=oFso.opentextfile(sPlaylist,2,true)
Set oT=oFso.opentextfile(sTracklist,2,true)

For i = 0 to n-1
oT.writeline MP3s(i) 'In der Tracklist ist der Dateiname Eins zu Eins
intDelimpos= Instr(Left(Mp3s(i), 6), "-")
IF intdelimpos = 0 then intDelimpos = Instr(Left(Mp3s(i), 6), " ")
Do while ( Mid(Mp3s(i),intdelimpos+1,1)=" " or Mid(Mp3s(i),intdelimpos+1,1)="-")
intDelimPos=intDelimpos+1
Loop
If intdelimpos= 0 then
intdelimpos=InputBox ("Titel '"& left(Mp3s(i),25) & "....'" & vbCRLF _
& "Wieviele Zeichen sollen jeweils vom Anfang weggeschnitten werden?",_
"Kein Delimiter erkennbar",0)
end if
oP.writeline Mid(MP3s(i),intdelimpos+1) ' Playlist.. ohne Prefix/TrackNo
Next
oP.close
oT.close
'------------ Unchanged ab hier
MsgBox n & " .mp3 Dateien in Tracklist/Playlist " & sTracklist & "/.m2u geschrieben."

Sub quicksort (mArray, FromPos, ToPos)
i = FromPos
j = ToPos
p = mArray((i+j)/2)
Do
For i = i to j
If StrComp(mArray(i), p, 1) >= 0 Then Exit For
Next
For j = j to i step -1
If StrComp(mArray(j), p, 1) <= 0 Then Exit For
Next
If i <= j Then
t = mArray(i)
mArray(i) = mArray(j)
mArray(j) = t
i = i+1
j = j-1
End if
Loop Until i > j
If FromPos < j Then quicksort mArray, FromPos, j
If ToPos > i Then quicksort mArray, i, ToPos
End Sub
' end of Mp3list.vbs-Skizze

Tut mir Leid, dass ich da so begriffsstutzig bin, aber ich versteh nicht, an welcher Stelle Du hängst.
HTH
Biber
Mitglied: 16568
16568 Mar 18, 2006 at 16:33:58 (UTC)
Goto Top
Ich ehrlich gesagt auch nicht face-big-smile

Und ich mach' eine Menge Schei* mit VBS...


Lonesome Walker