robcomboy
Goto Top

Ordnerstruktur aus Dateinamen erstellen

Hallo, hat jemand eine Idee, wie es möglich ist aus einem Dateinamen eine Ordnerstruktur zu erstellen.
Ich habe mir Playlisten generiert, die nach dem folgenden Prinzip benannt sind.

Artist - Album - Disk01.m3u

Aus dieser Datei würde ich gerne eine Ordnerstruktur erstellen.
Im Ordner Album liegt der Ordner Disk01.
Album wiederum liegt im Ordner Artist.
Und die Playlist soll am Ende in den Ordner Disk01 verschoben werden.

Vielleicht hat ja jemand eine Idee, wo man sowas machen könnte.

Danke schon mal.

Content-Key: 56675

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

Printed on: April 16, 2024 at 21:04 o'clock

Member: miniversum
miniversum Apr 15, 2007 at 15:00:02 (UTC)
Goto Top
Angenommen die Batch liegt im gleichen Verzeichnis wie deine Playlist (Artist - Album - Disk01.m3u), dann:

@echo off
set playlist="Artist - Album - Disk01.m3u"  
for /F "tokens=1-3 delims=- " %%a in (%playlist%) do md "%%a\%%b\%%c" && move %playlist% "%%a\%%b\%%c"  

miniversum
Member: bastla
bastla Apr 15, 2007 at 15:25:01 (UTC)
Goto Top
Hallo robcomboy!

Zur Abwechslung einmal etwas VBS:
'OrdnerStrukturErzeugen.vbs  
If WScript.Arguments.Count < 1 Then
	WScript.Echo "Bitte Startordner beim Aufruf angeben oder auf das Script ziehen!"  
	WScript.Quit(1)	
End If
Set fso = CreateObject("Scripting.FileSystemObject")  
BasisPfad = WScript.Arguments(0)
If Not fso.FolderExists(BasisPfad) Then
	WScript.Echo "Der Startordner wurde nicht gefunden!"  
	WScript.Quit(1)	
End If
For Each Datei In fso.GetFolder(BasisPfad).Files
	If Right(Datei.Name, 4) = ".m3u" Then  
		Ordner = Split(Left(Datei.Name, Len(Datei.Name) - 4), "-")  
		Pfad = BasisPfad
		For i = 0 To UBound(Ordner)
			Pfad = Pfad & "\" & Trim(Ordner(i))  
			If Not fso.FolderExists(Pfad) Then fso.CreateFolder(Pfad)
		Next
		Datei.Move Pfad & "\"  
	End If
Next
WScript.Echo "Fertig."  
Aufruf zB mit
C:\Scripts\OrdnerStrukturErzeugen.vbs "D:\Meine vielen Musikdateien"  

Grüße
bastla
Member: robcomboy
robcomboy Apr 15, 2007 at 16:36:48 (UTC)
Goto Top
Hallo Bastla, Danke für deine Mühe die du dir gemacht hast.
Ich habe das Script auch gleich schon ausprobiert.

Leider funktioniert es nicht einen Ordner drauf zu ziehen, noch mit einer Befehlszeile, wie du es in deinem Beispiel vorgemacht hast.

Immer wenn ich das Script über eine CMD mit dem Pfad aufrufe, bekomme ich die folgende Meldung.

"Bitte Startordner beim Aufruf angeben oder auf das Script ziehen"

Danke schonmal,
Grüße, Robcomboy
Member: bastla
bastla Apr 15, 2007 at 16:49:51 (UTC)
Goto Top
Hallo robcomboy!

Jetzt bin ich ein wenig ratlos: Ich habe die oben stehende Version nochmals aus dem Forum heruntergeladen und mit Erfolg auf beide Arten getestet. Insbesondere per Drag & Drop dürfte es ohnehin nicht zu diesem Fehler kommen, da ja auf jeden Fall ein Argument übergeben wird.

Schreib vielleicht zum Testen als erste Zeile ein
WScript.Echo WScript.Arguments.Count
hinein - damit wird die Anzahl der übergebenen Argumente angezeigt.

Grüße
bastla
Member: robcomboy
robcomboy Apr 15, 2007 at 17:04:09 (UTC)
Goto Top
Ich habe die Zeile eingefügt und er gibt mir "0" aus.

Ich hab auch den Ordner noch mal draufgezogen, in dem die m3us liegen.
Dasselbe, wieder "0"

Woran könnte das liegen?
Member: bastla
bastla Apr 15, 2007 at 17:10:17 (UTC)
Goto Top
Hallo robcomboy!

Woran könnte das liegen?
Da habe ich momentan wirklich keine Ahnung ... face-sad

... however, damit Du aber doch noch zu Deiner Struktur kommst, ersetze einfachen den ganzen Parameter- und Ordner-Check-Teil (also die Zeilen vor dem "For Each") durch die Zeile
BasisPfad = "D:\Vollständiger Pfad zum Ordner mit den m3u-Dateien"  
und versuch es dann mit einem Aufruf ohne Argumente (oder einem Doppelklick) - sinnvoller Weise nur mit einigen Testdaten.

Grüße
bastla
Member: miniversum
miniversum Apr 15, 2007 at 17:17:49 (UTC)
Goto Top
ach jetzt versteh ich erst wie Du das genau haben willst. Dann korrigiere ich mein Posting zu folgendem:
@echo off
for /F "delims=" %%a in (dir /b /A-D *.m3u) do call dodir "%%a"  
goto ende

:dodir
for /F "tokens=1-3 delims=- " %%a in (%1) do md "%%a\%%b\%%c" && move %1 "%%a\%%b\%%c"  
goto eof

:ende

Diese batchdatei legst du einfach in das Verzeichnis mit deinen Playlists.

miniversum
Member: bastla
bastla Apr 15, 2007 at 17:22:05 (UTC)
Goto Top
@miniversum

Ein Grund, warum ich es per VBS versucht habe, sind eventuelle Leerstellen in Artist und / oder Album ...

Grüße
bastla
Member: robcomboy
robcomboy Apr 15, 2007, updated at Mar 29, 2023 at 21:25:15 (UTC)
Goto Top
Wenn ich alles Richtig gemacht habe, sieht das Ding jetzt so aus.

BasisPfad = "G:\01\m3u"  
For Each Datei In fso.GetFolder(BasisPfad).Files
    If Right(Datei.Name, 4) = ".m3u" Then  
        Ordner = Split(Left(Datei.Name, Len(Datei.Name) - 4), "-")  
        Pfad = BasisPfad
        For i = 0 To UBound(Ordner)
            Pfad = Pfad & "\" & Trim(Ordner(i))  
            If Not fso.FolderExists(Pfad) Then fso.CreateFolder(Pfad)
        Next
        Datei.Move Pfad & "\"  
    End If
Next
WScript.Echo "Fertig."  

Dann Krieg ich die Meldung das,

Objekt erforderlich "fso"
Member: miniversum
miniversum Apr 15, 2007, updated at Mar 29, 2023 at 21:25:33 (UTC)
Goto Top
Ok macht Sinn.
Wären dann auch Bindestriche abgedeckt???

Ich korrigiere meins dannochmal zu:

@echo off & enabledelayedexpansion
for /F "delims=" %%a in (dir /b /A-D *.m3u) do call dodir "%%a"  
goto ende

:dodir
for /F "tokens=1-3 delims=-" %%a in (%1) do (  
set "artist=%%a"  
set "album=%%b"  
set "titel=%%c"  
set "artist=%artist:~0,-1%"  
set "allbum=%album:~1,-1%"  
set "titel=%titel:~1%"  
md "%artist%"\"%album%"\"%titel%"  
move %1 "%artist%\%album%\%titel%"  
)
goto eof

:ende

miniversum
Member: bastla
bastla Apr 15, 2007 at 17:29:37 (UTC)
Goto Top
Hallo robcomboy!

Sorry, eine Zeile zuviel weggeworfen ...

Set fso = CreateObject("Scripting.FileSystemObject")  
BasisPfad = "G:\01\m3u"  
For Each Datei In fso.GetFolder(BasisPfad).Files
    If Right(Datei.Name, 4) = ".m3u" Then  
        Ordner = Split(Left(Datei.Name, Len(Datei.Name) - 4), "-")  
        Pfad = BasisPfad
        For i = 0 To UBound(Ordner)
            Pfad = Pfad & "\" & Trim(Ordner(i))  
            If Not fso.FolderExists(Pfad) Then fso.CreateFolder(Pfad)
        Next
        Datei.Move Pfad & "\"  
    End If
Next
WScript.Echo "Fertig."  

Grüße
bastla
Member: robcomboy
robcomboy Apr 15, 2007 at 17:30:21 (UTC)
Goto Top
Angenommen die Batch liegt im gleichen
Verzeichnis wie deine Playlist (Artist -
Album - Disk01.m3u), dann:

@echo off
> set playlist="Artist - Album -  
> Disk01.m3u"  
> for /F "tokens=1-3 delims=- " %%a  
> in (%playlist%) do md "%%a\%%b\%%c"  
> && move %playlist%
> "%%a\%%b\%%c"  
> 

miniversum


Hallo, habe deine Batch auch probiert.
Den Namen der Playlist die ich reingeschrieben habe, war als beispiel gedacht,
Also, egal was vor bzw. nach dem " - " steht, darua soll dann der entsprechende Ordner und dessen Unterordner erstellt werden.
Mit deiner Lösung wird anhand der vordefinierten m3u die Ordnerstruktur erstellt.
Dieses würde aber nicht für eine vielzahl von Playlist funktionieren, sondern nur für die, welche genau dem Namen der Playlist entspricht, den du in deiner Batch angegeben hast.

Auf jedenfall Dnake für deine Mühe,
Member: robcomboy
robcomboy Apr 15, 2007 at 17:34:39 (UTC)
Goto Top
Hallo robcomboy!

Sorry, eine Zeile zuviel weggeworfen ...

Set fso =
> CreateObject("Scripting.FileSystemObject")  
> BasisPfad = "G:\01\m3u"  
> For Each Datei In
> fso.GetFolder(BasisPfad).Files
>     If Right(Datei.Name, 4) =
> ".m3u" Then  
>         Ordner = Split(Left(Datei.Name,
> Len(Datei.Name) - 4), "-")  
>         Pfad = BasisPfad
>         For i = 0 To UBound(Ordner)
>             Pfad = Pfad & "\"  
> & Trim(Ordner(i))
>             If Not fso.FolderExists(Pfad)
> Then fso.CreateFolder(Pfad)
>         Next
>         Datei.Move Pfad & "\"  
>     End If
> Next
> WScript.Echo "Fertig."  
> 

Grüße
bastla



Cool, jetzt fluppt es,
Danke schön, Fettes Merci !!!

Kann man was das Prob mit der Startfolder angeht nicht einen Dialog öffnen lassen, in dem ich dann im explorer den Ordner auswähle?
Somit wäre das VBS universell einsetzbar, ohne das ich den Pfad reinkopieren müsste.

Aber nur noch wenn Du magst,
Danke schon mal.
Member: robcomboy
robcomboy Apr 15, 2007 at 17:41:37 (UTC)
Goto Top
ach jetzt versteh ich erst wie Du das genau
haben willst. Dann korrigiere ich mein
Posting zu folgendem:
@echo off
> for /F "delims=" %%a in (dir /b  
> /A-D *.m3u) do call dodir "%%a"  
> goto ende
> 
> :dodir
> for /F "tokens=1-3 delims=- " %%a  
> in (%1) do md "%%a\%%b\%%c"  
> && move %1 "%%a\%%b\%%c"  
> goto eof
> 
> :ende
> 

Diese batchdatei legst du einfach in das
Verzeichnis mit deinen Playlists.

miniversum

Also, wenn ich das hier in ne BITCH schreibe, dann funktioniert das leider nicht.
Member: bastla
bastla Apr 15, 2007 at 17:45:01 (UTC)
Goto Top
Hallo miniversum!

Wären dann auch Bindestriche abgedeckt???
UU ein weiteres Problem ... und einen Delimiter aus 3 Zeichen (" - ") kann "for" leider nicht zusammenhängend verarbeiten.

Wenn Du nur nach "-" (und ev wegen des Typs ".m3u") noch nach "." trennst und das dann entstehende Token 4 für die Verzeichniserstellung ignorierst, bleiben immer noch die lästigen Leerstellen nach Artist, vor und nach Album und vor Diskxx - Biber hätte dafür sicher etwas auf Lager, ich müsste mir mit Zwischenvariablen (zB %Album%) und Konstruktionen wie
if "%Album:~0,1%"==" " set "Album=%Album:~1%"  
if "%Album:~-1%"==" " set "Album=%Album:~0,-1%"  
etc behelfen.

Grüße
bastla

[Edit] @miniversum: Hatte Deine Edits nicht gesehen ... [/Edit]
Member: robcomboy
robcomboy Apr 15, 2007 at 17:49:25 (UTC)
Goto Top
Ok macht Sinn.
Wären dann auch Bindestriche
abgedeckt???

Ich korrigiere meins dannochmal zu:
@echo off &
> enabledelayedexpansion
> for /F "delims=" %%a in (dir /b  
> /A-D *.m3u) do call dodir "%%a"  
> goto ende
> 
> :dodir
> for /F "tokens=1-3 delims=-" %%a  
> in (%1) do (
> set "artist=%%a"  
> set "album=%%b"  
> set "titel=%%c"  
> set "artist=%artist:~0,-1%"  
> set "allbum=%album:~1,-1%"  
> set "titel=%titel:~1%"  
> md
> "%artist%"\"%album%"\"%titel%"  
> move %1
> "%artist%\%album%\%titel%"  
> )
> goto eof
> 
> :ende
> 
miniversum

"Leerzeichen Minus Leerzeichen" trennt im Prinzip die Ordnernamen voneinander.
Leider funktioniert es mit dieser version noch immer nicht, kann auch nicht sehen, weil sich die batch direkt schließt.
wenn ich ne pause einsetze hilft das auch nicht.
Member: bastla
bastla Apr 15, 2007 at 18:57:29 (UTC)
Goto Top
Hallo robcomboy!

Ich mag es ja noch immer nicht wahrhaben, dass die Übergabe eines Pfades nicht klappt, daher vielleicht folgende Variante:
Set fso = CreateObject("Scripting.FileSystemObject")  
If WScript.Arguments.Count >=1 Then
	If fso.FolderExists(WScript.Arguments(0)) Then BasisPfad = WScript.Arguments(0)
End If
If BasisPfad = "" Then  
	Set Verzeichnis = CreateObject("Shell.Application") _  
        .BrowseForFolder(0, "Datei oder Verzeichnis wählen", 0, 17)  
	If TypeName(Verzeichnis) = "Nothing" Then WScript.Quit(1)  
	Set Basis = Verzeichnis.Self
	BasisPfad = Basis.Path
End If
For Each Datei In fso.GetFolder(BasisPfad).Files
    If Right(Datei.Name, 4) = ".m3u" Then  
        Ordner = Split(Left(Datei.Name, Len(Datei.Name) - 4), " - ")  
        Pfad = BasisPfad
        For i = 0 To UBound(Ordner)
            Pfad = Pfad & "\" & Trim(Ordner(i))  
            If Not fso.FolderExists(Pfad) Then fso.CreateFolder(Pfad)
        Next
        Datei.Move Pfad & "\"  
    End If
Next
WScript.Echo "Fertig."  
Bei Übergabe eines gültigen Pfades als Argument wird dieser verwendet, im anderen Fall landest Du in einem Verzeichnisauswahldialog.

Grüße
bastla

[Edit] Trennzeichen auf " - " geändert. [/Edit]
Member: robcomboy
robcomboy Apr 15, 2007 at 19:25:53 (UTC)
Goto Top
Hallo robcomboy!

Ich mag es ja noch immer nicht wahrhaben,
dass die Übergabe eines Pfades nicht
klappt, daher vielleicht folgende Variante:
Set fso =
> CreateObject("Scripting.FileSystemObject")  
> If WScript.Arguments.Count >=1 Then
> 	If fso.FolderExists(WScript.Arguments(0))
> Then BasisPfad = WScript.Arguments(0)
> End If
> If BasisPfad = "" Then  
> 	Set Verzeichnis =
> CreateObject("Shell.Application")  
> _
>         .BrowseForFolder(0, "Datei oder  
> Verzeichnis wählen", 0, 17)  
> 	If TypeName(Verzeichnis) =
> "Nothing" Then WScript.Quit(1)  
> 	Set Basis = Verzeichnis.Self
> 	BasisPfad = Basis.Path
> End If
> For Each Datei In
> fso.GetFolder(BasisPfad).Files
>     If Right(Datei.Name, 4) =
> ".m3u" Then  
>         Ordner = Split(Left(Datei.Name,
> Len(Datei.Name) - 4), "-")  
>         Pfad = BasisPfad
>         For i = 0 To UBound(Ordner)
>             Pfad = Pfad & "\"  
> & Trim(Ordner(i))
>             If Not fso.FolderExists(Pfad)
> Then fso.CreateFolder(Pfad)
>         Next
>         Datei.Move Pfad & "\"  
>     End If
> Next
> WScript.Echo "Fertig."  
> 
Bei Übergabe eines
gültigen Pfades als Argument wird dieser
verwendet, im anderen Fall landest Du in
einem Verzeichnisauswahldialog.

Grüße
bastla


Super, das Funktioniert jetzt, jetzt kann ich den Ordner auswählen.
Klasse, Danke.
Lässt es sich noch realisieren, dass man in einem Feld den Pfad einfügt, den man in die Zwischablage kopiert hat, so dass dann der genommen wird, wenn man dann keinen Pfad über die Ordnerstruktur gewählt hat?

Danke Dir bastla!!!!
Member: bastla
bastla Apr 15, 2007 at 19:35:11 (UTC)
Goto Top
Hallo robcomboy!

Mein bestes Angebot dafür sieht so aus (bitte ganze Zeile 7 - wegen der Textkorrektur - oder zumindest in dieser Zeile 0 durch 16 ersetzen):
        .BrowseForFolder(0, "Verzeichnis wählen", <b>16</b>, 17)  

Grüße
bastla
Member: robcomboy
robcomboy Apr 15, 2007 at 20:03:13 (UTC)
Goto Top
Hallo robcomboy!

Mein bestes Angebot dafür sieht so aus
(bitte ganze Zeile 7 - wegen der
Textkorrektur - oder zumindest in dieser
Zeile 0 durch 16 ersetzen):
        .BrowseForFolder(0,
> "Verzeichnis wählen",  
> <b>16</b>, 17)
> 

Grüße
bastla

Hallo Bastla, Danke das Funktioniert jetzt auch.
Auf jeden Fall vielen Dank für deine Arbeit und Mühe die Du dir gemacht hast.
Du hast mir sehr viel Zeit erspart.
Wenn ich Irgendwie helfen kann, schreib mich an, ich tu mein Bestes.

Übrigens, mir ist noch eine Idee eingefallen, wie man das Script noch universeller gestalten könnte. Wäre es mögich ein Feld zu definieren, in das man dann die Dateiendungen einträgt, welche bei der ganzen Aktion berücksichtigt werden sollen? Damit lönnte man dann auch mal eben seinen DL ordner aufräumen, diese Dateien habe ich nämlich ähnlich benannt und einmal Script laufen lassen und schon ist alles in den entsprechenden Ordnern einsortiert.

Diese Funktion muss natürlich nicht,
Nur wenn Du noch Bock hast.
Auf jeden Fall vielen Dank,
Wenn wir uns nicht mhr "hören" Dir noch ein schönes WE.

Grüße, robcomboy
Member: bastla
bastla Apr 15, 2007 at 20:30:07 (UTC)
Goto Top
Hallo robcomboy!

"Feld" definieren ist bei VBS so eine Sache für sich, da nur in Ansätzen eine GUI vorhanden ist (für Eingaben zB eine InputBox() oder eben ein Dialog wie die Ordnerauswahl). Umso mehr stört mich, dass die Übergabe von Argumenten bei Dir nicht funktioniert.

Für den Dateityp wird's eine InputBox tun (müssen) - daher Endfassung:
'OrdnerStrukturErzeugen.vbs  
'Argumente: [BasisPfad] [DateiTyp]  
Set fso = CreateObject("Scripting.FileSystemObject")  
If WScript.Arguments.Count >=1 Then
	If fso.FolderExists(WScript.Arguments(0)) Then BasisPfad = WScript.Arguments(0)
End If
If BasisPfad = "" Then  
	Set Verzeichnis = CreateObject("Shell.Application") _  
        .BrowseForFolder(0, "Datei oder Verzeichnis wählen", 16, 17)  
	If TypeName(Verzeichnis) = "Nothing" Then WScript.Quit(1)  
	Set Basis = Verzeichnis.Self
	BasisPfad = Basis.Path
End If
If WScript.Arguments.Count >=2 Then
	DateiTyp = WScript.Arguments(1)
Else
	DateiTyp = InputBox("Gesuchten Dateityp eingeben!", "Typ?", "m3u")  
	If DateiTyp = "" Then WScript.Quit(1)  
End If
DateiTyp = LCase(DateiTyp)
If Left(DateiTyp, 1) <> "." Then DateiTyp = "." & DateiTyp  
For Each Datei In fso.GetFolder(BasisPfad).Files
	Typ = LCase(Mid(Datei.Name, InstrRev(Datei.Name, ".")))  
    If Typ = DateiTyp Then
        Ordner = Split(Left(Datei.Name, Len(Datei.Name) - Len(Typ)), "-")  
        Pfad = BasisPfad
        For i = 0 To UBound(Ordner)
            Pfad = Pfad & "\" & Trim(Ordner(i))  
            If Not fso.FolderExists(Pfad) Then fso.CreateFolder(Pfad)
        Next
        Datei.Move Pfad & "\"  
    End If
Next
WScript.Echo "Fertig."  
Wenn übrigens sichergestellt ist, dass die Trennung immer in der Form " - ", also jeweils mit Leerstellen vor und hinter dem "-", erfolgt, könnte man dies in der Zeile "Ordner = ..." für das Splitten berücksichtigen - dadurch wären dann auch Namen mit enthaltenem "-" korrekt zu verarbeiten ...

Offen bleibt noch zumindest eine Fehlerbehandlung bei bereits existierenden Dateien im Zielverzeichnis.

Grüße
bastla
Member: robcomboy
robcomboy Apr 15, 2007 at 21:11:28 (UTC)
Goto Top
Hallo robcomboy!

Umsomehr stört mich, dass die Übergabe
von Argumenten bei Dir nicht funktioniert.
Wie meinst Du das? Was verstehst du unter Argumenten?

wenn übrigens sichergestellt ist, dass die Trennung immer
in der Form " - ", also jeweils mit
Leerstellen vor und hinter dem "-",
erfolgt, könnte man dies in der Zeile
"Ordner = ..." für das
Splitten berücksichtigen.
Das ist sichergestellt. die Trennung ist immer in dieser Form.
Was meinst DU mit "für das
Splitten berücksichtigen.
"


dadurch wären dann auch Namen mit enthaltenem
"-" korrekt zu verarbeiten ...

Läßt sich das realisieren?

Offen bleibt noch zumindest eine
Fehlerbehandlung bei bereits existierenden
Dateien im Zielverzeichnis.

Ansatz wäre hier existierenden umzubenennen.

Grüße, robcomboy
Member: bastla
bastla Apr 15, 2007 at 21:21:22 (UTC)
Goto Top
Hallo robcomboy!

Mit "Argumenten" meinte ich "Parameter", also die Übergabe von Pfad und Dateityp beim Aufruf von der Commandline (wird vom Script unterstützt, scheint aber - mir nicht erklärlich - bei Dir nicht zu funktionieren, siehe oben ...).
Hinsichtlich der "-": Ersetze die entsprechende Zeile durch:
        Ordner = Split(Left(Datei.Name, Len(Datei.Name) - Len(Typ)), " - ")  
In dieser Zeile wird der Dateiname mit der "Split()"-Funktion in Ordnerebenen (Artist\Album\Diskxx) aufgeteilt.
Bereits vorhandene Dateien:
Ansatz wäre hier existierenden umzubenennen.
Dazu müsstest Du Dir eine Vorgabe überlegen ...

Grüße
bastla

... der heute sicher nix mehr umbenennt ...
Member: robcomboy
robcomboy Apr 15, 2007 at 21:32:34 (UTC)
Goto Top
Hallo robcomboy!

Mit "Argumenten" meinte ich
"Parameter", also die Übergabe
von Pfad und Dateityp beim Aufruf von der
Commandline (wird vom Script
unterstützt, scheint aber - mir nicht
erklärlich - bei Dir nicht zu
funktionieren, siehe oben ...).
Hinsichtlich der "-": Ersetze die
entsprechende Zeile durch:
        Ordner =
> Split(Left(Datei.Name, Len(Datei.Name) -
> Len(Typ)), " - ")  
> 
In dieser Zeile wird der
Dateiname mit der
"Split()"-Funktion in Ordnerebenen
(Artist\Album\Diskxx) aufgeteilt.
Bereits vorhandene Dateien:
> Ansatz wäre hier existierenden
umzubenennen.
Dazu müsstest Du Dir eine Vorgabe
überlegen ...

Grüße
bastla

... der heute sicher nix mehr umbenennt
...




Danke Bastla, ich seh dann morgen danach.
Gruß, robcomboy
Member: Biber
Biber Apr 15, 2007 at 22:51:08 (UTC)
Goto Top
Hallo robcomboy, bastla und miniversum,

wenn diese Playlist-Erstellungs-Lösung hier zu Ende ausgefeilt ist, würde ich dann gerne mit Euch gemeinsam je eine Batch und eine VBSkript-Lösung (und meinetwegen noch eine als Kontext-im-Explorer-Lösung als Draufgabe) als Tutorial in den Bereich "Batch & Shell" stellen.

Bitte lasst uns dazu in den nächsten Tagen, wenn hier der letzte Feinschliff fertig ist, mal ein paar PNs austauschen.
Ich sichte mal unterdessen die bereits vorhandenen Lösungen/Antworten bei ähnlichen Playlist-Anforderungen.

Würde mich freuen, wenn es klappt.

@robcomboy
Es heißt definitiv "Batch & Shell", nicht "Bitch & sHell" ..*ggg

Grüsse
Biber
Member: miniversum
miniversum Apr 16, 2007 at 09:01:10 (UTC)
Goto Top
So nach ein paar Stunden Schlaf und nem Kaffee hab ich jetzt die Batch zum laufen gebracht und getestet.
@echo off & setlocal enabledelayedexpansion

for /F "delims=" %%a in ('dir /b /A-D *.m3u') do call:dodir "%%a"  
goto ende

:dodir

for /F "delims=" %%a in (%1) do set "file=%%~na"  
for /F "tokens=1-3 delims=-" %%a in ("%file%") do (  

set "myartist=%%a"  
set "myalbum=%%b"  
set "mytitel=%%c"  

md "!myartist:~0,-1!\!myalbum:~1,-1!\!mytitel:~1!"  
move %1 "!myartist:~0,-1!\!myalbum:~1,-1!\!mytitel:~1!"  
)
goto ende

:ende
Liegt diese im Verzeichnis mit den Playlists werde alle nach einander umgewandelt.

miniversum
Member: robcomboy
robcomboy Apr 16, 2007 at 21:04:37 (UTC)
Goto Top
Hallo robcomboy, bastla und miniversum,

wenn diese Playlist-Erstellungs-Lösung
hier zu Ende ausgefeilt ist, würde ich
dann gerne mit Euch gemeinsam je eine Batch
und eine VBSkript-Lösung (und
meinetwegen noch eine als
Kontext-im-Explorer-Lösung als
Draufgabe) als Tutorial in
den Bereich "Batch & Shell"
stellen.

Bitte lasst uns dazu in den nächsten
Tagen, wenn hier der letzte Feinschliff
fertig ist, mal ein paar PNs austauschen.
Ich sichte mal unterdessen die bereits
vorhandenen Lösungen/Antworten bei
ähnlichen Playlist-Anforderungen.

Würde mich freuen, wenn es klappt.

@robcomboy
Es heißt definitiv "Batch &
Shell", nicht "Bitch &
sHell" ..*ggg

Grüsse
Biber

Hallo Biber, deine Idee finde ich schön, vor allem die Integration ins Kontextmenü ist genial.
ich fände es natürlich gut, wenn man das realisieren könnte.
Wobei ich dazusaen muss, dass ich mich leider am geschehen, was das programmieren angeht
nicht aktiv beteiligen kann, da ich weder batch noch vbs programmieren kann.
Eine Idee wäre zum Beispiel einen Beitrag aufzumachen, in dem für diese Batcg und das VBS Ideen gesammelt werden, was das Ding alles können soll und was es für funktionen haben soll.

Bin gespannt auf deine Antwort.
Grüße, robcomboy
Member: robcomboy
robcomboy Apr 16, 2007 at 21:11:20 (UTC)
Goto Top
So nach ein paar Stunden Schlaf und nem
Kaffee hab ich jetzt die Batch zum laufen
gebracht und getestet.
@echo off & setlocal
> enabledelayedexpansion
> 
> for /F "delims=" %%a in ('dir  
> /b /A-D *.m3u') do call:dodir  
> "%%a"  
> goto ende
> 
> :dodir
> 
> for /F "delims=" %%a in (%1) do  
> set "file=%%~na"  
> for /F "tokens=1-3 delims=-" %%a  
> in ("%file%") do (  
> 
> set "myartist=%%a"  
> set "myalbum=%%b"  
> set "mytitel=%%c"  
> 
> md
> "!myartist:~0,-1!\!myalbum:~1,-1!\!mytitel:~1!"  
> move %1
> "!myartist:~0,-1!\!myalbum:~1,-1!\!mytitel:~1!"  
> )
> goto ende
> 
> :ende
> 
Liegt diese im Verzeichnis mit den Playlists
werde alle nach einander umgewandelt.

miniversum

Hallo Miniversum:

Danke für die Batch.
Ich habe sie ausprobiert.

Bei mir ist es so, dass die Batch den Ordner erstellt, aber dabei den letzten Buchstaben des Ordnernamens weglässt.
Das ist wahrscheinlich dann auch der Grund dafür, warm die Dateien nicht in den erstellten Ordner kopiert werden.

Grüße, robcomboy
Member: miniversum
miniversum Apr 17, 2007 at 07:06:54 (UTC)
Goto Top
Ich habs gerade eben mit allen möglichen Kombintionen getestet.
Eben immer die Kombination mit " - " getrennt.
Bei mir gehts.
Fehlt bei jedem Ordner der letzte Buchstabe oder nur bei einem der drei Ordner?

miniversum
Member: robcomboy
robcomboy Apr 17, 2007 at 07:35:27 (UTC)
Goto Top
es fehlt bei jedem der letzte buchstabe.
Member: miniversum
miniversum Apr 17, 2007 at 07:43:15 (UTC)
Goto Top
@echo off & setlocal enabledelayedexpansion

for /F "delims=" %%a in ('dir /b /A-D *.m3u') do call:dodir "%%a"  
goto ende

:dodir

for /F "delims=" %%a in (%1) do set "file=%%~na"  
for /F "tokens=1-3 delims=-" %%a in ("%file%") do (  

set "myartist=%%a"  
set "myalbum=%%b"  
set "mytitel=%%c"  

echo Playlist=[%1]>>Log.txt
echo Artist=[!myartist:~0,-1!]>>Log.txt
echo Album=[!myalbum:~1,-1!]>>Log.txt
echo Titel=[!mytitel:~1!]>>Log.txt
echo.>>Log.txt

md "!myartist:~0,-1!\!myalbum:~1,-1!\!mytitel:~1!"  
move %1 "!myartist:~0,-1!\!myalbum:~1,-1!\!mytitel:~1!"  
)
goto ende

:ende

Lass diese mal laufen. Dabei wir wird dir eine Datei log.txt erstellt. Poste mal bitte diese log.txt (zumindest auszugsweise)

miniversum
Member: robcomboy
robcomboy Apr 17, 2007, updated at Mar 29, 2023 at 21:26:41 (UTC)
Goto Top
@echo off & setlocal
> enabledelayedexpansion
> 
> for /F "delims=" %%a in ('dir  
> /b /A-D *.m3u') do call:dodir  
> "%%a"  
> goto ende
> 
> :dodir
> 
> for /F "delims=" %%a in (%1) do  
> set "file=%%~na"  
> for /F "tokens=1-3 delims=-" %%a  
> in ("%file%") do (  
> 
> set "myartist=%%a"  
> set "myalbum=%%b"  
> set "mytitel=%%c"  
> 
> echo Playlist=[%1]>>Log.txt
> echo
> Artist=[!myartist:~0,-1!]>>Log.txt
> echo Album=[!myalbum:~1,-1!]>>Log.txt
> echo Titel=[!mytitel:~1!]>>Log.txt
> echo.>>Log.txt
> 
> md
> "!myartist:~0,-1!\!myalbum:~1,-1!\!mytitel:~1!"  
> move %1
> "!myartist:~0,-1!\!myalbum:~1,-1!\!mytitel:~1!"  
> )
> goto ende
> 
> :ende
> 

Lass diese mal laufen. Dabei wir wird dir
eine Datei log.txt erstellt. Poste mal bitte
diese log.txt (zumindest auszugsweise)

miniversum

Schein geklappt zu haben:

Hier die Log Datei.

Playlist=["Kopie von test - test1 - test2 - test3.m3u"]  
Artist=[Kopie von test]
Album=[test1]
Titel=[test2 ]

Playlist=["test - test1 - test2 - test3.m3u"]  
Artist=[test]
Album=[test1]
Titel=[test2 ]

Jetzt habe ich aber noch eine Frage,
anhand deiner Logdatei und der Zuordnung,

Was wäre, wenn die Playlist so heißen würde:
"Kopie von test - test1 - test2 - test3 - test4.m3u"

Weil, Artist Album und Titel kann man doch nur einmal vergeben, oder?

Grüße, robcomboy
Member: miniversum
miniversum Apr 17, 2007 at 09:00:23 (UTC)
Goto Top
in deinem Eingangsposting meintest du noch das die Playlist ein Format von "test - test1 - test2.m3u" hat also drei Elemente nicht vier wie du sie jetzt getestet hast ("test - test1 - test2 - test3.m3u"). Meine Batch nimmt nur die ersten drei Elemente. Der rest dahinter fällt weg. Oder willst du das ganze jetzt mit vier?

Verwendest du also eine Playlist mit dem Namen "Kopie von test - test1 - test2 - test3 - test4.m3u" werden die Ordner so angelegt:
Kopie von test
test1
test2

miniversum
Member: bastla
bastla Apr 17, 2007 at 09:32:10 (UTC)
Goto Top
Hallo robcomboy!

Was wäre, wenn die Playlist so heißen würde:
"Kopie von test - test1 - test2 - test3 - test4.m3u"
Dann hättest du die von Dir vorgegebene Konvention nicht eingehalten und müsstest zunächst einmal festlegen,
  • ob daraus 5 Ordnerebenen entstehen sollen (wie es das VB-Script oben machen würde) oder
  • welche der Teilbestandteile (nach welchen Kriterien) zusammengefasst werden sollten.

Grüße
bastla
Member: robcomboy
robcomboy Apr 17, 2007 at 09:33:04 (UTC)
Goto Top
in deinem Eingangsposting meintest du noch
das die Playlist ein Format von "test -
test1 - test2.m3u" hat also drei
Elemente nicht vier wie du sie jetzt getestet
hast ("test - test1 - test2 -
test3.m3u"). Meine Batch nimmt nur die
ersten drei Elemente. Der rest dahinter
fällt weg. Oder willst du das ganze
jetzt mit vier?

Verwendest du also eine Playlist mit dem
Namen "Kopie von test - test1 - test2 -
test3 - test4.m3u" werden die Ordner so
angelegt:
> Kopie von test
> test1
> test2

miniversum


Ah, OK.

Verstehe, ja am Anfang habe ich das so geschrieben.
doch manchmal kommt es auch vor, dass die Playlist, wenn es ein Spezial auf der cd gibt, die unbedingt in die Bennenung mit rein soll, länger als die 3 Platzhalter werden kann.
Für eben diesen Fall, würde das dann nicht funktionieren.
Im Verlauf der ganzen Angelegenheit hier, habe ich dann mehr und mehr eine uiversal Lösung im Kopf gehabt, die agel wie lang die Playlisten oder in der erweiterten Form anderen Dateinamen sind, dass aus ihnen die entsprechende Struktur erstellt wird.

Primär war die Idee die Playlisten umzuwandeln.

Grüße, robcomboy
Member: robcomboy
robcomboy Apr 17, 2007 at 09:43:11 (UTC)
Goto Top
Hallo robcomboy!

> Was wäre, wenn die Playlist so
heißen würde:
> "Kopie von test - test1 - test2 -
test3 - test4.m3u"
Dann hättest du die von Dir
vorgegebene Konvention nicht eingehalten und
müsstest zunächst einmal
festlegen,
  • ob daraus 5 Ordnerebenen entstehen sollen
(wie es das VB-Script oben machen würde)
oder
  • welche der Teilbestandteile (nach welchen
Kriterien) zusammengefasst werden sollten.

Grüße
bastla

Okay, hab das Prob verstanden.

Es sollen also genau so viele Ordnerebenen erstellt werden wie
Trennzeichen [" - " +1] vorhanden sind.

Das Trennzeichen wäre immer " - ".
Angewandt auf das Beispiel:

"Kopie von test - test1 - test2 - test3 - test4.m3u"

Insgesamt 5 Ordner, wobei im ersten Ordnen dann die Unterordnerstruktur test1 bis test 4 liegt.
Ich hoffe ich hab das jetzt verständlich erklärt. Wenn noch was unklar sein sollte, bitte noch mal melden.

Grüße, robcomboy
Member: bastla
bastla Apr 17, 2007, updated at Oct 18, 2012 at 16:31:51 (UTC)
Goto Top
Hallo robcomboy!

Hast Du das schon versucht (vielleicht sogar mit einem Aufruf der folgenden Art)?
OrdnerStrukturErzeugen.vbs D:\StartOrdner m3u

Grüße
bastla
Member: robcomboy
robcomboy Apr 17, 2007, updated at Oct 18, 2012 at 16:31:51 (UTC)
Goto Top
Hallo robcomboy!

Hast Du
das schon versucht (vielleicht sogar mit
einem Aufruf der folgenden Art)?
OrdnerStrukturErzeugen.vbs
> D:\StartOrdner m3u
> 

Grüße
bastla

Hallo Bastla,

Mit der Version funktioniert es wunderbar, ich habe eben mal eine Playlist
mit 7 unterverzeichnissen angelegt. Es hat funktioniert.

Der Aufruf des VBS mit Übergabe des Pfades hat weder mit noch ohne "" via cmd funktioniert.
ist nicht schlimm, man kann den Pfad ja auch über die Zwischenablage einfügen, in die dafür vorgesehene Zeile.

Gruß, und Dank, robcomboy


Noch ein Nachtrag,
Jetzt hab ich das gerallt.
Startordner war der Pfad und m3u die extension die berücksichtigt werden soll.
damit hat es auch nicht funktioniert.
Aber auch wenn ich das dann so mache, mit "" funktioniert es nicht.
Member: miniversum
miniversum Apr 17, 2007 at 15:36:31 (UTC)
Goto Top
So jetzt mal die kurze Batch Lösung die nur auf " - " reagiert und mehrere Verzeichnistiefen kann:
@echo off

for /F "delims=" %%a in ('dir /b /A-D *.m3u') do call:dodir "%%~na"  
goto ende

:dodir
set "file=%1"  
set fulldir="%file: - =\%"  
md %fulldir%
move %1 %fulldir%
goto ende

:ende

miniversum

PS: so einfach lass ich das mit dem vbs ja nicht auf mir sitzen hehe
Member: bastla
bastla Apr 17, 2007 at 16:31:57 (UTC)
Goto Top
@miniversum

Das mit dem Ersetzen ist ein gute Idee. face-smile

Den Rest würde ich vielleicht eher so schreiben (dann klappt's auch mit dem "move" und mit dazwischengestreuten Leerstellen):
@echo off

for /F "delims=" %%a in ('dir /b /A-D *.m3u') do call:dodir "%%a"  
goto :eof

:dodir
set "file=%~n1"  
set "fulldir=%file: - =\%"  
md "%fulldir%"  
move %1 "%fulldir%"  

Grüße
bastla
Member: robcomboy
robcomboy Apr 17, 2007 at 18:39:30 (UTC)
Goto Top
So jetzt mal die kurze Batch Lösung die
nur auf " - " reagiert und mehrere
Verzeichnistiefen kann:
> @echo off
> 
> for /F "delims=" %%a in ('dir  
> /b /A-D *.m3u') do call:dodir  
> "%%~na"  
> goto ende
> 
> :dodir
> set "file=%1"  
> set fulldir="%file: - =\%"  
> md %fulldir%
> move %1 %fulldir%
> goto ende
> 
> :ende
> 

miniversum

PS: so einfach lass ich das mit dem vbs ja
nicht auf mir sitzen hehe


Diese Batch erstellt aus dem Beispiel
"dir 1 - dir2 - dir3 - dir4 - dir5 - dir6 - dir7 - dir8.m3u"

einen Ordner 1 und einen Ordner Dir im Verzeichnis wo ich die Batch ausführe.
ich denke das liegt am Leerzeichen zwischen dir und 1.
Im Ordner 1 werden den die Unterordner entsprechend angelegt. dir 2 bis dir8.

Das ich das festgestellt hab, war wohl eher zufällig.

Grüße, robcomboy
Member: robcomboy
robcomboy Apr 17, 2007 at 18:46:15 (UTC)
Goto Top
So jetzt mal die kurze Batch Lösung die
nur auf " - " reagiert und mehrere
Verzeichnistiefen kann:
> @echo off
> 
> for /F "delims=" %%a in ('dir  
> /b /A-D *.m3u') do call:dodir  
> "%%~na"  
> goto ende
> 
> :dodir
> set "file=%1"  
> set fulldir="%file: - =\%"  
> md %fulldir%
> move %1 %fulldir%
> goto ende
> 
> :ende
> 

miniversum

PS: so einfach lass ich das mit dem vbs ja
nicht auf mir sitzen hehe

Die hier funktioniert.

Gruß, robcomboy
Mitglied: 45753
45753 Apr 19, 2007 at 16:43:17 (UTC)
Goto Top
Hallo robcomboy,

bastla gab mir sein ok und hat mir noch ein paar tips gegeben...

Hier hast du nun das Script, in dem du jetzt per Abfrage gleich mehrere Trennzeichen definieren kannst + die Dateiendung.

In dem ersten Script sin d die Infos von bastla mit drin - mit "setlocal enabledelayedexpansion"
Ich hatte auch schon versucht das so hinzubiegen, nur hatte ich die ! nicht gesetzt...

@echo off
setlocal enabledelayedexpansion
cls

:abfrageanfang

echo \\\                               -I-N-F-O-S-                               ///
echo -==/==========================================================================-
ECHO  .. Angaben zur Dateiendung
echo -==/==========================================================================-
echo.
set /p dateiendung= == Dateiendung mit Punkt angeben: 
cls
echo \\\                               -I-N-F-O-S-                               ///
echo -==/==========================================================================-
ECHO  .. Angaben zu Trennungszeichen
echo -==/==========================================================================-
echo -==/==========================================================================-
ECHO  .. -Trennungszeichen von der laengsten zur kuerzesten Zeichenkette angeben.
ECHO  .. -Mit ENTER wird Abfrage abgebrochen und bisherige Eingaben ausgefuehrt.
echo -==/==========================================================================-
echo.
set /p fulldir1_choice= == Trennungszeichen [1/9]: 
if "%fulldir1_choice%" == "" goto abfrageende  
set /p fulldir2_choice= == Trennungszeichen [2/9]: 
if "%fulldir2_choice%" == "" goto abfrageende  
set /p fulldir3_choice= == Trennungszeichen [3/9]: 
if "%fulldir3_choice%" == "" goto abfrageende  
set /p fulldir4_choice= == Trennungszeichen [4/9]: 
if "%fulldir4_choice%" == "" goto abfrageende  
set /p fulldir5_choice= == Trennungszeichen [5/9]: 
if "%fulldir5_choice%" == "" goto abfrageende  
set /p fulldir6_choice= == Trennungszeichen [6/9]: 
if "%fulldir6_choice%" == "" goto abfrageende  
set /p fulldir7_choice= == Trennungszeichen [7/9]: 
if "%fulldir7_choice%" == "" goto abfrageende  
set /p fulldir8_choice= == Trennungszeichen [8/9]: 
if "%fulldir8_choice%" == "" goto abfrageende  
set /p fulldir9_choice= == Trennungszeichen [9/9]: 
if "%fulldir9_choice%" == "" goto abfrageende  

:abgeschlossen

cls
echo.
echo -==/==========================================================================-
ECHO  .. Ausfuehrung der Operation
echo -==/==========================================================================-
echo.
echo  == Operation abgeschlossen.
echo.
pause

goto :eof

:abfrageende

cls
echo.
echo -==/==========================================================================-
ECHO  .. Ausfuehrung der Operation
echo -==/==========================================================================-
echo.
echo  == wait...
echo.

if "%fulldir1_choice%" == "" set fulldir1_choice=""  
if "%fulldir2_choice%" == "" set fulldir2_choice=""  
if "%fulldir3_choice%" == "" set fulldir3_choice=""  
if "%fulldir4_choice%" == "" set fulldir4_choice=""  
if "%fulldir5_choice%" == "" set fulldir5_choice=""  
if "%fulldir6_choice%" == "" set fulldir6_choice=""  
if "%fulldir7_choice%" == "" set fulldir7_choice=""  
if "%fulldir8_choice%" == "" set fulldir8_choice=""  
if "%fulldir9_choice%" == "" set fulldir9_choice=""  

for /F "delims=" %%a in ('dir /b /A-D *%dateiendung%') do call:dodir "%%a"  
goto :abgeschlossen

:dodir

set "fulldir0=%~n1"  
set "fulldir1=!fulldir0:%fulldir1_choice%=\!"  

set "fulldir2=%fulldir1%"  
set "fulldir2=!fulldir1:%fulldir2_choice%=\!"  

set "fulldir3=%fulldir2%"  
set "fulldir3=!fulldir2:%fulldir3_choice%=\!"  

set "fulldir4=%fulldir3%"  
set "fulldir4=!fulldir3:%fulldir4_choice%=\!"  

set "fulldir5=%fulldir4%"  
set "fulldir5=!fulldir4:%fulldir5_choice%=\!"  

set "fulldir6=%fulldir5%"  
set "fulldir6=!fulldir5:%fulldir6_choice%=\!"  

set "fulldir7=%fulldir6%"  
set "fulldir7=!fulldir6:%fulldir7_choice%=\!"  

set "fulldir8=%fulldir7%%"  
set "fulldir8=!fulldir7:%fulldir8_choice%=\!"  

set "fulldir9=%fulldir8%"  
set "fulldir9=!fulldir8:%fulldir9_choice%=\!"  

md "%fulldir9%"  
move %1 "%fulldir9%"  

:eof

Hier nun mein Script ohne delayedexpansion

@echo off
cls

:abfrageanfang

echo \\\                               -I-N-F-O-S-                               ///
echo -==/==========================================================================-
ECHO  .. Angaben zur Dateiendung
echo -==/==========================================================================-
echo.
set /p dateiendung= == Dateiendung mit Punkt angeben: 
cls
echo \\\                               -I-N-F-O-S-                               ///
echo -==/==========================================================================-
ECHO  .. Angaben zu Trennungszeichen
echo -==/==========================================================================-
echo -==/==========================================================================-
ECHO  .. -Trennungszeichen von der laengsten zur kuerzesten Zeichenkette angeben.
ECHO  .. -Mit ENTER wird Abfrage abgebrochen und bisherige Eingaben ausgefuehrt.
echo -==/==========================================================================-
echo.
set /p fulldir1_choice= == Trennungszeichen [1/9]: 
if "%fulldir1_choice%" == "" goto abfrageende  
set /p fulldir2_choice= == Trennungszeichen [2/9]: 
if "%fulldir2_choice%" == "" goto abfrageende  
set /p fulldir3_choice= == Trennungszeichen [3/9]: 
if "%fulldir3_choice%" == "" goto abfrageende  
set /p fulldir4_choice= == Trennungszeichen [4/9]: 
if "%fulldir4_choice%" == "" goto abfrageende  
set /p fulldir5_choice= == Trennungszeichen [5/9]: 
if "%fulldir5_choice%" == "" goto abfrageende  
set /p fulldir6_choice= == Trennungszeichen [6/9]: 
if "%fulldir6_choice%" == "" goto abfrageende  
set /p fulldir7_choice= == Trennungszeichen [7/9]: 
if "%fulldir7_choice%" == "" goto abfrageende  
set /p fulldir8_choice= == Trennungszeichen [8/9]: 
if "%fulldir8_choice%" == "" goto abfrageende  
set /p fulldir9_choice= == Trennungszeichen [9/9]: 
if "%fulldir9_choice%" == "" goto abfrageende  

:abfrageende

cls
echo.
echo -==/==========================================================================-
ECHO  .. Ausfuehrung der Operation
echo -==/==========================================================================-
echo.
echo  == wait...
echo.

if "%fulldir1_choice%" == "" set fulldir1_choice=""  
if "%fulldir2_choice%" == "" set fulldir2_choice=""  
if "%fulldir3_choice%" == "" set fulldir3_choice=""  
if "%fulldir4_choice%" == "" set fulldir4_choice=""  
if "%fulldir5_choice%" == "" set fulldir5_choice=""  
if "%fulldir6_choice%" == "" set fulldir6_choice=""  
if "%fulldir7_choice%" == "" set fulldir7_choice=""  
if "%fulldir8_choice%" == "" set fulldir8_choice=""  
if "%fulldir9_choice%" == "" set fulldir9_choice=""  

:: ---

set ordnerstruktur_var=Ordnerstruktur.aus.Dateinamen.erstellen_exec.bat
del /f /q  %ordnerstruktur_var% 2>Nul

echo @echo off>%ordnerstruktur_var%
echo cls>>%ordnerstruktur_var%

echo for /F "delims=" %%%%a in ('dir /b /A-D *%dateiendung%') do call:dodir "%%%%a">>%ordnerstruktur_var%  
echo exit>>%ordnerstruktur_var%

echo :dodir>>%ordnerstruktur_var%

echo set "fulldir0=%%~n1">>%ordnerstruktur_var%  
echo set "fulldir1=%%fulldir0:%fulldir1_choice%=\%%">>%ordnerstruktur_var%  

echo set "fulldir2=%%fulldir1%%">>%ordnerstruktur_var%  
echo set "fulldir2=%%fulldir1:%fulldir2_choice%=\%%">>%ordnerstruktur_var%  

echo set "fulldir3=%%fulldir2%%">>%ordnerstruktur_var%  
echo set "fulldir3=%%fulldir2:%fulldir3_choice%=\%%">>%ordnerstruktur_var%  

echo set "fulldir4=%%fulldir3%%">>%ordnerstruktur_var%  
echo set "fulldir4=%%fulldir3:%fulldir4_choice%=\%%">>%ordnerstruktur_var%  

echo set "fulldir5=%%fulldir4%%">>%ordnerstruktur_var%  
echo set "fulldir5=%%fulldir4:%fulldir5_choice%=\%%">>%ordnerstruktur_var%  

echo set "fulldir6=%%fulldir5%%">>%ordnerstruktur_var%  
echo set "fulldir6=%%fulldir5:%fulldir6_choice%=\%%">>%ordnerstruktur_var%  

echo set "fulldir7=%%fulldir6%%">>%ordnerstruktur_var%  
echo set "fulldir7=%%fulldir6:%fulldir7_choice%=\%%">>%ordnerstruktur_var%  

echo set "fulldir8=%%fulldir7%%">>%ordnerstruktur_var%  
echo set "fulldir8=%%fulldir7:%fulldir8_choice%=\%%">>%ordnerstruktur_var%  

echo set "fulldir9=%%fulldir8%%">>%ordnerstruktur_var%  
echo set "fulldir9=%%fulldir8:%fulldir9_choice%=\%%">>%ordnerstruktur_var%  

echo :dodirend>>%ordnerstruktur_var%

echo md "%%fulldir9%%">>%ordnerstruktur_var%  
echo move %%1 "%%fulldir9%%">>%ordnerstruktur_var%  

start /B /wait %ordnerstruktur_var%

:: ---

del /f /q  %ordnerstruktur_var% 2>Nul

cls
echo.
echo -==/==========================================================================-
ECHO  .. Ausfuehrung der Operation
echo -==/==========================================================================-
echo.
echo  == Operation abgeschlossen.
echo.
pause

:: ---

:eof


Beide Batch-Dateien liefern das selbe Ergebnis.

@bastla: Danke für die Korrektur

Grüsse,
wobleibtdiezeit
Member: Biber
Biber Apr 19, 2007 at 17:29:32 (UTC)
Goto Top
Moin, wobleibtdiezeit,

schön, dass Du auch mitmischt... face-wink

@all
Wenn ich so den Lösungsfortschritt richtig einschätze, könnten wir wohl spätestens nächste Woche mal das Beste der vorangegangenen 114cm zu einem Tutorial zusammendampfen?

Oder sind etwa Perfektionisten an Bo(a)rd, die noch Verbesserungswünsche haben?

Gruss
Biber
Member: bastla
bastla Apr 19, 2007, updated at Oct 18, 2012 at 16:31:52 (UTC)
Goto Top
@Biber

Hast Du übrigens eine Idee zu robcomboy's Arguments-Notstand?

Grüße
bastla
Member: Biber
Biber Apr 19, 2007 at 17:54:26 (UTC)
Goto Top
@bastla
Nein, ist auch bei mir nicht reprozierbar... *ratlos guck*

@robcomboy
Du hast auch nicht zufällig die Ursache inzwischen gefunden?

Gruss
Biber
Member: robcomboy
robcomboy Apr 19, 2007 at 18:03:09 (UTC)
Goto Top
@bastla
Nein, ist auch bei mir nicht reprozierbar...
*ratlos guck*

@robcomboy
Du hast auch nicht zufällig die Ursache
inzwischen gefunden?

Gruss
Biber

Ich habs grad nochmal probiert.
Vielleicht liegt es auch irgendwie an meinem sys.
ich werds ma anders testen.
bis später
Member: robcomboy
robcomboy Apr 19, 2007 at 18:12:55 (UTC)
Goto Top
@bastla
Nein, ist auch bei mir nicht reprozierbar...
*ratlos guck*

@robcomboy
Du hast auch nicht zufällig die Ursache
inzwischen gefunden?

Gruss
Biber

Es liegt wohl irendwie an meinem sys.
ich hab wbdz mal das ding geschickt, bei ihm hats gefunzzt.
bei mir nicht, liegt also an meinm sys, wobei ich nicht weiss, wo ich suchen soll, aber nebensache.
Member: bastla
bastla Apr 19, 2007 at 18:56:18 (UTC)
Goto Top
Hallo robcomboy!

Das ist schade, denn ich muss ja mit den Batchern mithalten face-wink und habe das Script noch ein wenig aufgebohrt:
'MacheOrdner.vbs  
'Argumente: [BasisPfad] [[.]DateiTyp] [Suchstring[:Suchstring]]  
Const DD = ":"  
Set fso = CreateObject("Scripting.FileSystemObject")  
If WScript.Arguments.Count >=1 Then
    If fso.FolderExists(WScript.Arguments(0)) Then BasisPfad = WScript.Arguments(0)
End If
If BasisPfad = "" Then  
    Set Verzeichnis = CreateObject("Shell.Application") _  
        .BrowseForFolder(0, "Datei oder Verzeichnis wählen", 16, 17)  
    If TypeName(Verzeichnis) = "Nothing" Then WScript.Quit(1)  
    Set Basis = Verzeichnis.Self
    BasisPfad = Basis.Path
End If
If WScript.Arguments.Count >=2 Then
    DateiTyp = WScript.Arguments(1)
Else
    DateiTyp = InputBox("Gesuchten Dateityp eingeben!", "Typ?", "m3u")  
    If DateiTyp = "" Then WScript.Quit(1)  
End If
If WScript.Arguments.Count >=3 Then
    Delims = WScript.Arguments(2)
Else
    Delims = InputBox("Alle gewünschten Trennzeichen mit '" & DD & "' unterteilt eingeben!", "Trennzeichen?")  
    If Delims = "" Then WScript.Quit(1)  
End If
Trenn=Split(Delims, DD)
DateiTyp = LCase(DateiTyp)
If Left(DateiTyp, 1) <> "." Then DateiTyp = "." & DateiTyp  
For Each Datei In fso.GetFolder(BasisPfad).Files
    Typ = LCase(Mid(Datei.Name, InstrRev(Datei.Name, ".")))  
    If Typ = DateiTyp Then
		DName = Left(Datei.Name, Len(Datei.Name) - Len(Typ))
		For i = 0 To UBound(Trenn)
			DName = Replace(DName, Trenn(i), DD)
		Next
		DName = Replace(DName, DD & DD, DD)
        Ordner = Split(DName, DD)
        Pfad = BasisPfad
        For i = 0 To UBound(Ordner)
            Pfad = Pfad & "\" & Trim(Ordner(i))  
            If Not fso.FolderExists(Pfad) Then fso.CreateFolder(Pfad)
        Next
        Datei.Move Pfad & "\"  
    End If
Next
WScript.Echo "Fertig."  
Jetzt würde das Script folgenden Aufruf erlauben:
MacheOrdner.vbs "D:\Musik und so" .m3u " - :#:_"  
Getrennt würde dann bei " - ", bei "#" und bei "_".

Die selbe Eingabe (ohne die Anführungszeichen) kann aber auch über eine weitere InputBox erfolgen, so dass Du (etwas mühsamer) trotzdem testen kannst (wenn Du magst).

Das Trennen der Trennzeichen mit ":" hat übrigens den Hintergrund, dass ein Dateiname ja ohnehin keinen ":" enthalten sollte (ja, ich habe schon gerüchteweise von NTFS ADS gehört) - es kann aber in der Zeile
Const DD = ":"  
auch ein anderes Zeichen festgelegt werden.

Grüße
bastla
Member: robcomboy
robcomboy Apr 19, 2007 at 19:27:21 (UTC)
Goto Top
Hallo robcomboy!

Das ist schade, denn ich muss ja mit den
Batchern mithalten face-wink und habe das Script
noch ein wenig aufgebohrt:
'MacheOrdner.vbs  
> 'Argumente: [BasisPfad] [[.]DateiTyp]  
> [Suchstring[:Suchstring]]
> Const DD = ":"  
> Set fso =
> CreateObject("Scripting.FileSystemObject")  
> If WScript.Arguments.Count >=1 Then
>     If
> fso.FolderExists(WScript.Arguments(0)) Then
> BasisPfad = WScript.Arguments(0)
> End If
> If BasisPfad = "" Then  
>     Set Verzeichnis =
> CreateObject("Shell.Application")  
> _
>         .BrowseForFolder(0, "Datei oder  
> Verzeichnis wählen", 16, 17)  
>     If TypeName(Verzeichnis) =
> "Nothing" Then WScript.Quit(1)  
>     Set Basis = Verzeichnis.Self
>     BasisPfad = Basis.Path
> End If
> If WScript.Arguments.Count >=2 Then
>     DateiTyp = WScript.Arguments(1)
> Else
>     DateiTyp = InputBox("Gesuchten  
> Dateityp eingeben!", "Typ?",  
> "m3u")  
>     If DateiTyp = "" Then  
> WScript.Quit(1)
> End If
> If WScript.Arguments.Count >=3 Then
>     Delims = WScript.Arguments(2)
> Else
>     Delims = InputBox("Alle  
> gewünschten Trennzeichen mit
> '" & DD & "'  
> unterteilt eingeben!",  
> "Trennzeichen?")  
>     If Delims = "" Then  
> WScript.Quit(1)
> End If
> Trenn=Split(Delims, DD)
> DateiTyp = LCase(DateiTyp)
> If Left(DateiTyp, 1) <> "."  
> Then DateiTyp = "." & DateiTyp  
> For Each Datei In
> fso.GetFolder(BasisPfad).Files
>     Typ = LCase(Mid(Datei.Name,
> InstrRev(Datei.Name, ".")))  
>     If Typ = DateiTyp Then
> 		DName = Left(Datei.Name, Len(Datei.Name) -
> Len(Typ))
> 		For i = 0 To UBound(Trenn)
> 			DName = Replace(DName, Trenn(i), DD)
> 		Next
> 		DName = Replace(DName, DD & DD, DD)
>         Ordner = Split(DName, DD)
>         Pfad = BasisPfad
>         For i = 0 To UBound(Ordner)
>             Pfad = Pfad & "\"  
> & Trim(Ordner(i))
>             If Not fso.FolderExists(Pfad)
> Then fso.CreateFolder(Pfad)
>         Next
>         Datei.Move Pfad & "\"  
>     End If
> Next
> WScript.Echo "Fertig."  
> 
Jetzt würde das Script
folgenden Aufruf erlauben:
MacheOrdner.vbs "D:\Musik  
> und so" .m3u " - :#:_"  
> 
Getrennt würde dann bei
" - ", bei "#" und bei
"_".

Die selbe Eingabe (ohne die
Anführungszeichen) kann aber auch
über eine weitere InputBox erfolgen, so
dass Du (etwas mühsamer) trotzdem testen
kannst (wenn Du magst).

Das Trennen der Trennzeichen mit
":" hat übrigens den
Hintergrund, dass ein Dateiname ja ohnehin
keinen ":" enthalten sollte (ja,
ich habe schon gerüchteweise von NTFS
ADS gehört
) - es kann aber in der
Zeile
Const DD = ":"  
> 
auch ein anderes Zeichen
festgelegt werden.

Grüße
bastla

Hi Bastla, das mit dem draufziehen wird dann also nichts, leider.
Naja, wenn ich das sys neu installiere, wird sich das erledigt haben.
Das Script funkioniert so, wunderbar.
Das ist natürlich fett, das ich jetzt die Extensions definieren kann.
Geht es auch mehrere extensions zu definieren, so wie man auch die "Separator" mehrfach eintragen kann?

Lässt sich auch ein Fenster einblenden, bei dem man die zutreffenden "Optionen",
" - ","#","_" ankreuzt, sodass nur die berücksichtigt werden die angekreuzt werden.
Bei den Vielen Dateiendungen die es gibt, würde das natürlich den Rahmen sprengen, aber vielleicht kann man häufig verwendete hinzufügen.

Biber hatte ben noch von Perfektionisten gesprochen,
mir ist noch eine Idee eingefallen, wie man das Script noch erweitern könnte.
Diese Funktion bezieht sich auf das wegsortieren von Downloads mit dem VBS-Srcipt.
Es ist noch eine erweiterte Funktion:

Die Möglichkeit, Dateiendungen zu definieren die berücksichtigt werden sollen.
und bei denen soll dann nach dem wegsortieren dann noch die Dateversion angehängt werden, so muss man das nicht manuell machen, indem man z.b. die Install exe aufruft um zu sehen welche Version es ist..

Ich hätte da noch einige weitere Ideen, aber nur, wenn das nicht zu viel ist.

Danke Dir mal wieder für deine Mühe, Bastla !
Member: robcomboy
robcomboy Apr 19, 2007 at 19:58:21 (UTC)
Goto Top
@bastla
Nein, ist auch bei mir nicht reprozierbar...
*ratlos guck*

@robcomboy
Du hast auch nicht zufällig die Ursache
inzwischen gefunden?

Gruss
Biber

Ich habe mir da schon mal gedanken gemacht, wie man die Batch und das VBS ins
Kontextmenü rein kriegt. Es gibt ein Programm namens, "FileMenuTools."
mit diesem ist es möglich batches etc. ins contextmenu einzubinden, leider funktionierte die batch nicht.
Auch über das "Senden An" Menü hab ich es versucht, weder mit der Batch noch mit dem VBS hat es funktioniert.
Wie man das ganze sonst noch ins Kontextmenü reinfummeln könnte weis ich nicht.

Gruß, robcomboy
Member: miniversum
miniversum Apr 20, 2007 at 06:46:33 (UTC)
Goto Top
Ok die Batch mit draufziehbarem Verzeichnis:
@echo off

pushd %1
for /F "delims=" %%a in ('dir /b /A-D *.m3u') do call:dodir "%%a"  
popd
goto :ende

:dodir
set "file=%~n1"  
set "fulldir=%file: - =\%"  
md "%fulldir%"  
move %1 "%fulldir%"  
goto :ende

:ende

miniversum
Mitglied: 45753
45753 Apr 20, 2007, updated at Oct 18, 2012 at 16:31:52 (UTC)
Goto Top
Tach,

mit diesen zwei Zeilen am Anfang der Batch ist die Batch Sendto fähig.

cd %~dp1
%~d1

@robocom: jede Batch einzeln in FileMenu Tools einzubinden wäre ein riesiger zeitaufwand der nicht nötig ist. Mach dir einen Hardlink für den Sendto Ordner - wie hier beschrieben...

Senden an im Kontextmenü verändern Kinderleicht (Win 98)

... von deinem Ordner in dem du alle Batch-Dateien aufbewahrst. Jede Batch-Datei die diese zwei zeilen vorher stehen hat wird dann auch über das Sentto-Menü lauffähig sein.

Kleiner Nebeneffekt: du kannst jetzt neben den Ordnern auch Dateien direkt auf die Batch-Datei ziehen.

@echo off

cd %~dp1
%~d1

pushd %1
for /F "delims=" %%a in ('dir /b /A-D *.m3u') do call:dodir "%%a"  
popd
goto :ende

:dodir
set "file=%~n1"  
set "fulldir=%file: - =\%"  
md "%fulldir%"  
move %1 "%fulldir%"  
goto :ende

:ende

Grüsse,
wobleibtdiezeit
Member: bastla
bastla Apr 20, 2007 at 09:48:38 (UTC)
Goto Top
Hallo wobleibtdiezeit!

Etwas eleganter: "cd /d %~dp1" oder "pushd %~dp1".

Grüße
bastla
Mitglied: 45753
45753 Apr 20, 2007 at 15:59:08 (UTC)
Goto Top
Nabend,

-Verbesserungen aus den letzten Posts + weiteren Sachen sind in die Batch eingeflossen...
-Man kann nun wie in der Eingabeaufforderung Zeichen eingrenzen. Dritte, die damit vielleicht nix anzufangen weissen, stehen jetzt ein paar Beispiele in der Batch zur Seite.

@echo off
setlocal enabledelayedexpansion
cls

cd /d %~dp1

:abfrageanfang

echo \\\                               -I-N-F-O-S-                               ///
echo -==/==========================================================================-
ECHO  .. Angaben zu Zeichen in Datei(en)
echo -==/==========================================================================-
echo -==/==========================================================================-
ECHO  .. -Beispiel fuer eine Dateieindung: *.m3u
ECHO  .. -Beispiel fuer mehrere Dateieindungen: *.m3u *.mp3 *.txt
ECHO  .. -Beispiel fuer ein Zeichen aus Dateinamen: *nelly*
ECHO  .. -Beispiel fuer mehrere Zeichen aus Dateinamen: *nelly* *timbaland*
ECHO  .. -Beispiel fuer Kombination aus Beispielen: *nelly*.mp3 *timbaland*.m3u
echo -==/==========================================================================-
echo.
set /p zeichenausdatei= == Zeichen in Datei(en) angeben: 

cls
echo \\\                               -I-N-F-O-S-                               ///
echo -==/==========================================================================-
ECHO  .. Angaben zu Trennungszeichen in Dateinamen
echo -==/==========================================================================-
echo -==/==========================================================================-
ECHO  .. -Trennungszeichen von der laengsten zur kuerzesten Zeichenkette angeben.
ECHO      -Beispiel fuer Trennzeichen:
echo       "Nelly.Furtado.-.Loose_Promiscuous.mp3"  
echo       "Nelly.Furtado.-.Loose_Say.It.Right.mp3"  
echo       == Trennungszeichen [1/9]: .-.
echo       == Trennungszeichen [2/9]: _
ECHO  .. -Mit ENTER wird Abfrage abgebrochen und bisherige Eingaben ausgefuehrt.
echo -==/==========================================================================-
echo.
set /p fulldir1_choice= == Trennungszeichen [1/9]: 
if "%fulldir1_choice%" == "" goto abfrageende  
set /p fulldir2_choice= == Trennungszeichen [2/9]: 
if "%fulldir2_choice%" == "" goto abfrageende  
set /p fulldir3_choice= == Trennungszeichen [3/9]: 
if "%fulldir3_choice%" == "" goto abfrageende  
set /p fulldir4_choice= == Trennungszeichen [4/9]: 
if "%fulldir4_choice%" == "" goto abfrageende  
set /p fulldir5_choice= == Trennungszeichen [5/9]: 
if "%fulldir5_choice%" == "" goto abfrageende  
set /p fulldir6_choice= == Trennungszeichen [6/9]: 
if "%fulldir6_choice%" == "" goto abfrageende  
set /p fulldir7_choice= == Trennungszeichen [7/9]: 
if "%fulldir7_choice%" == "" goto abfrageende  
set /p fulldir8_choice= == Trennungszeichen [8/9]: 
if "%fulldir8_choice%" == "" goto abfrageende  
set /p fulldir9_choice= == Trennungszeichen [9/9]: 
if "%fulldir9_choice%" == "" goto abfrageende  

:abgeschlossen

cls
echo.
echo -==/==========================================================================-
ECHO  .. Ausfuehrung der Operation
echo -==/==========================================================================-
echo.
echo  == Operation abgeschlossen.
echo.
pause

goto :eof

:abfrageende

cls
echo.
echo -==/==========================================================================-
ECHO  .. Ausfuehrung der Operation
echo -==/==========================================================================-
echo.
echo  == wait...
echo.

if "%fulldir1_choice%" == "" set fulldir1_choice=""  
if "%fulldir2_choice%" == "" set fulldir2_choice=""  
if "%fulldir3_choice%" == "" set fulldir3_choice=""  
if "%fulldir4_choice%" == "" set fulldir4_choice=""  
if "%fulldir5_choice%" == "" set fulldir5_choice=""  
if "%fulldir6_choice%" == "" set fulldir6_choice=""  
if "%fulldir7_choice%" == "" set fulldir7_choice=""  
if "%fulldir8_choice%" == "" set fulldir8_choice=""  
if "%fulldir9_choice%" == "" set fulldir9_choice=""  

pushd %1
for /F "delims=" %%a in ('dir /b /A-D %zeichenausdatei%') do call:dodir "%%a"  
popd
goto :abgeschlossen

:dodir

set "fulldir0=%~n1"  
set "fulldir1=!fulldir0:%fulldir1_choice%=\!"  

set "fulldir2=%fulldir1%"  
set "fulldir2=!fulldir1:%fulldir2_choice%=\!"  

set "fulldir3=%fulldir2%"  
set "fulldir3=!fulldir2:%fulldir3_choice%=\!"  

set "fulldir4=%fulldir3%"  
set "fulldir4=!fulldir3:%fulldir4_choice%=\!"  

set "fulldir5=%fulldir4%"  
set "fulldir5=!fulldir4:%fulldir5_choice%=\!"  

set "fulldir6=%fulldir5%"  
set "fulldir6=!fulldir5:%fulldir6_choice%=\!"  

set "fulldir7=%fulldir6%"  
set "fulldir7=!fulldir6:%fulldir7_choice%=\!"  

set "fulldir8=%fulldir7%%"  
set "fulldir8=!fulldir7:%fulldir8_choice%=\!"  

set "fulldir9=%fulldir8%"  
set "fulldir9=!fulldir8:%fulldir9_choice%=\!"  

md "%fulldir9%"  
move %1 "%fulldir9%"  

:eof

Grüsse,
wobleibtdiezeit
Member: miniversum
miniversum Apr 20, 2007 at 16:31:57 (UTC)
Goto Top
ACHTUNG GEFÄHRLICH!!!
Was ist der Unterschied von pushd %~dp1 zu pushd %1??
In diesem Fall gehe ich persönlich davon aus dasein Verzeichnis drauf gezogen wird. Dadurch brauche ich diesen ~dp Teil doch garnicht. Im Gegenteil ich bekomme sogar einen Fehler dadurch weil ein Verzeichnis namens "C:\verzeischnis\verzeichnis2" das ich daraufziehe bei einem %1 als "C:\verzeischnis\verzeichnis2" übernommen wird. Bei einem %~dp1 wird hingegen nur das "C:\verzeischnis" übernommen, der Teil "verzeichnis2" würde als Dateiname übernommen.
Hier zum Testen:
@echo off
echo mit %%1: [%1]
echo mit %%^~dp1: [%~dp1]
echo mit %%^~n1: [%~n1]
echo mit %%^~x1: [%~x1]
pause

miniversum
Member: bastla
bastla Apr 20, 2007 at 18:00:55 (UTC)
Goto Top
Hallo robcomboy!

Diese Version unterstützt mehrere Extensions:
'MacheOrdner2.vbs  
'Argumente: [BasisPfad] [[.]DateiTyp[ [.]DateiTyp]] [Suchstring[:Suchstring]]  
Const DD = ":"  
Set fso = CreateObject("Scripting.FileSystemObject")  
If WScript.Arguments.Count >=1 Then
    If fso.FolderExists(WScript.Arguments(0)) Then BasisPfad = WScript.Arguments(0)
End If
If BasisPfad = "" Then  
    Set Verzeichnis = CreateObject("Shell.Application") _  
        .BrowseForFolder(0, "Datei oder Verzeichnis wählen", 16, 17)  
    If TypeName(Verzeichnis) = "Nothing" Then WScript.Quit(1)  
    Set Basis = Verzeichnis.Self
    BasisPfad = Basis.Path
End If
If WScript.Arguments.Count >=2 Then
    DateiTyp = WScript.Arguments(1)
Else
    DateiTyp = InputBox("Gesuchten Dateityp eingeben," & vbCrLF & "mehrere Typen durch Leerstellen trennen!", "Typ?", "m3u")  
    If DateiTyp = "" Then WScript.Quit(1)  
End If
If WScript.Arguments.Count >=3 Then
    Delims = WScript.Arguments(2)
Else
    Delims = InputBox("Alle gewünschten Trennzeichen mit '" & DD & "' unterteilt eingeben!", "Trennzeichen?", " - :#:_")  
    If Delims = "" Then WScript.Quit(1)  
End If

Trenn = Split(Delims, DD)
DateiTyp = LCase(DateiTyp)

For Each Datei In fso.GetFolder(BasisPfad).Files
    Typ = LCase(Mid(Datei.Name, InstrRev(Datei.Name, ".") + 1))  
    If Instr(DateiTyp, Typ) Then
		DName = Left(Datei.Name, Len(Datei.Name) - Len(Typ))
		For i = 0 To UBound(Trenn)
			DName = Replace(DName, Trenn(i), DD)
		Next
		DName = Replace(DName, DD & DD, DD)
        Ordner = Split(DName, DD)
        Pfad = BasisPfad
        For i = 0 To UBound(Ordner)
            Pfad = Pfad & "\" & Trim(Ordner(i))  
            If Not fso.FolderExists(Pfad) Then fso.CreateFolder(Pfad)
        Next
        Datei.Move Pfad & "\"  
    End If
Next
WScript.Echo "Fertig."  

Eine "echte" GUI (also etwa mit Check- oder Comboboxen) lässt sich für VBS eigentlich nur über den Umweg "Internet Explorer" simulieren, wovon ich eher Abstand nehmen möchte - als (vielleicht schwacher) Kompromiss bliebe die Variante, in der InputBox mehrere Vorgaben zu machen, wobei die nicht benötigten dann zu löschen wären (im Script oben gezeigt für die Trennzeichen).
Was das Wegsortieren nach Dateitypen mit Anhängen des Datums anlangt, würde ich eher ein weiteres Spezialscript dafür verwenden - es muss ja nicht unbedingt eine an Featuritis erkrankte eierlegende WMS aus diesem kleinen Projekt hier werden ... face-wink

Grüße
bastla
Mitglied: 45753
45753 Apr 20, 2007 at 18:43:15 (UTC)
Goto Top
Hallo miniversum,

könntest du mir kurz erklären warum du bei der ausgabe "%%^~x1" geschrieben hast und nicht "%%~x1". Bei mir wird es so nämlich auch korrekt angezeigt. Was hat das Zeichen eigendlich für eine Bedeutung ?

Grüsse,
wbdz
Member: bastla
bastla Apr 20, 2007 at 20:51:44 (UTC)
Goto Top
@miniversum

Und falls es vielleicht doch kein Verzeichnis sein sollte:
if exist "%~1\" (  
    pushd %1
    ) else (
    pushd "%~dp1"  
)

Grüße
bastla
Mitglied: 45753
45753 Apr 21, 2007 at 09:16:48 (UTC)
Goto Top
Hallo,

ich habe ein paar Comments bekommen, in denen stand aus welchen Gründen meine Batch nutzlos ist.... Nun gut ich habe es eingesehen und mich entschieden die Batch zu löschen.

Sorry, wenn ich hier Blödsinn verbreitet habe...

Grüsse,
wbdz
Member: miniversum
miniversum Apr 21, 2007 at 14:38:39 (UTC)
Goto Top
Ist nur Anzeigebedingt.

Hab nicht ausprobiert obs auch ohne geht.

miniversum
Member: miniversum
miniversum Apr 21, 2007 at 14:43:58 (UTC)
Goto Top
Ok klar so gehts.
Aber eben kein generelles %~dp1. Das wollte ich damit sagen.
Ohne diese If Abfrage würde es sonst Fehler geben.

miniversum