Frage ist gelöstOrdnerstruktur aus Dateinamen erstellen
15.04.2007
15:05:01 Uhr5361 Aufrufe
62 Antworten
15:05:01 Uhr
62 Antworten
Noch nicht bewertet
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.
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.
miniversum schreibt am 15.04.2007 um 17:00:02 Uhr
Angenommen die Batch liegt im gleichen Verzeichnis wie deine Playlist (Artist - Album - Disk01.m3u), dann:
miniversum
01.
@echo off 02.
set playlist="Artist - Album - Disk01.m3u" 03.
for /F "tokens=1-3 delims=- " %%a in (%playlist%) do md "%%a\%%b\%%c" && move %playlist% "%%a\%%b\%%c"miniversum
bastla schreibt am 15.04.2007 um 17:25:01 Uhr
Hallo robcomboy!
Zur Abwechslung einmal etwas VBS:
Aufruf zB mit
Grüße
bastla
Zur Abwechslung einmal etwas VBS:
01.
'OrdnerStrukturErzeugen.vbs 02.
If WScript.Arguments.Count < 1 Then 03.
WScript.Echo "Bitte Startordner beim Aufruf angeben oder auf das Script ziehen!" 04.
WScript.Quit(1) 05.
End If 06.
Set fso = CreateObject("Scripting.FileSystemObject") 07.
BasisPfad = WScript.Arguments(0) 08.
If Not fso.FolderExists(BasisPfad) Then 09.
WScript.Echo "Der Startordner wurde nicht gefunden!" 10.
WScript.Quit(1) 11.
End If 12.
For Each Datei In fso.GetFolder(BasisPfad).Files 13.
If Right(Datei.Name, 4) = ".m3u" Then 14.
Ordner = Split(Left(Datei.Name, Len(Datei.Name) - 4), "-") 15.
Pfad = BasisPfad 16.
For i = 0 To UBound(Ordner) 17.
Pfad = Pfad & "\" & Trim(Ordner(i)) 18.
If Not fso.FolderExists(Pfad) Then fso.CreateFolder(Pfad) 19.
Next 20.
Datei.Move Pfad & "\" 21.
End If 22.
Next 23.
WScript.Echo "Fertig."01.
C:\Scripts\OrdnerStrukturErzeugen.vbs "D:\Meine vielen Musikdateien"Grüße
bastla
robcomboy schreibt am 15.04.2007 um 18:36:48 Uhr
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
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
bastla schreibt am 15.04.2007 um 18:49:51 Uhr
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
hinein - damit wird die Anzahl der übergebenen Argumente angezeigt.
Grüße
bastla
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
01.
WScript.Echo WScript.Arguments.CountGrüße
bastla
bastla schreibt am 15.04.2007 um 19:10:17 Uhr
Hallo robcomboy!

... 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
und versuch es dann mit einem Aufruf ohne Argumente (oder einem Doppelklick) - sinnvoller Weise nur mit einigen Testdaten.
Grüße
bastla
Woran könnte das liegen?
Da habe ich momentan wirklich keine Ahnung ... ... 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
01.
BasisPfad = "D:\Vollständiger Pfad zum Ordner mit den m3u-Dateien"Grüße
bastla
miniversum schreibt am 15.04.2007 um 19:17:49 Uhr
ach jetzt versteh ich erst wie Du das genau haben willst. Dann korrigiere ich mein Posting zu folgendem:
Diese batchdatei legst du einfach in das Verzeichnis mit deinen Playlists.
miniversum
01.
@echo off 02.
for /F "delims=" %%a in (dir /b /A-D *.m3u) do call dodir "%%a" 03.
goto ende 04.
05.
:dodir 06.
for /F "tokens=1-3 delims=- " %%a in (%1) do md "%%a\%%b\%%c" && move %1 "%%a\%%b\%%c" 07.
goto eof 08.
09.
:endeDiese batchdatei legst du einfach in das Verzeichnis mit deinen Playlists.
miniversum
robcomboy schreibt am 15.04.2007 um 19:24:01 Uhr
Wenn ich alles Richtig gemacht habe, sieht das Ding jetzt so aus.
[code]
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."
[/code]
Dann Krieg ich die Meldung das,
Objekt erforderlich "fso"
[code]
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."
[/code]
Dann Krieg ich die Meldung das,
Objekt erforderlich "fso"
miniversum schreibt am 15.04.2007 um 19:26:34 Uhr
Ok macht Sinn.
Wären dann auch Bindestriche abgedeckt???
Ich korrigiere meins dannochmal zu:
<code>@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
Wären dann auch Bindestriche abgedeckt???
Ich korrigiere meins dannochmal zu:
<code>@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
bastla schreibt am 15.04.2007 um 19:29:37 Uhr
Hallo robcomboy!
Sorry, eine Zeile zuviel weggeworfen ...
Grüße
bastla
Sorry, eine Zeile zuviel weggeworfen ...
01.
Set fso = CreateObject("Scripting.FileSystemObject") 02.
BasisPfad = "G:\01\m3u" 03.
For Each Datei In fso.GetFolder(BasisPfad).Files 04.
If Right(Datei.Name, 4) = ".m3u" Then 05.
Ordner = Split(Left(Datei.Name, Len(Datei.Name) - 4), "-") 06.
Pfad = BasisPfad 07.
For i = 0 To UBound(Ordner) 08.
Pfad = Pfad & "\" & Trim(Ordner(i)) 09.
If Not fso.FolderExists(Pfad) Then fso.CreateFolder(Pfad) 10.
Next 11.
Datei.Move Pfad & "\" 12.
End If 13.
Next 14.
WScript.Echo "Fertig."Grüße
bastla
robcomboy schreibt am 15.04.2007 um 19:30:21 Uhr
Angenommen die Batch liegt im gleichen
Verzeichnis wie deine Playlist (Artist -
Album - Disk01.m3u), dann:
Verzeichnis wie deine Playlist (Artist -
Album - Disk01.m3u), dann:
01.
@echo off 02.
> set playlist="Artist - Album - 03.
> Disk01.m3u" 04.
> for /F "tokens=1-3 delims=- " %%a 05.
> in (%playlist%) do md "%%a\%%b\%%c" 06.
> && move %playlist% 07.
> "%%a\%%b\%%c" 08.
> 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,
robcomboy schreibt am 15.04.2007 um 19:34:39 Uhr
Hallo robcomboy!
Sorry, eine Zeile zuviel weggeworfen ...
Sorry, eine Zeile zuviel weggeworfen ...
01.
Set fso = 02.
> CreateObject("Scripting.FileSystemObject") 03.
> BasisPfad = "G:\01\m3u" 04.
> For Each Datei In 05.
> fso.GetFolder(BasisPfad).Files 06.
> If Right(Datei.Name, 4) = 07.
> ".m3u" Then 08.
> Ordner = Split(Left(Datei.Name, 09.
> Len(Datei.Name) - 4), "-") 10.
> Pfad = BasisPfad 11.
> For i = 0 To UBound(Ordner) 12.
> Pfad = Pfad & "\" 13.
> & Trim(Ordner(i)) 14.
> If Not fso.FolderExists(Pfad) 15.
> Then fso.CreateFolder(Pfad) 16.
> Next 17.
> Datei.Move Pfad & "\" 18.
> End If 19.
> Next 20.
> WScript.Echo "Fertig." 21.
> 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.
robcomboy schreibt am 15.04.2007 um 19:41:37 Uhr
ach jetzt versteh ich erst wie Du das genau
haben willst. Dann korrigiere ich mein
Posting zu folgendem:
haben willst. Dann korrigiere ich mein
Posting zu folgendem:
01.
@echo off 02.
> for /F "delims=" %%a in (dir /b 03.
> /A-D *.m3u) do call dodir "%%a" 04.
> goto ende 05.
> 06.
> :dodir 07.
> for /F "tokens=1-3 delims=- " %%a 08.
> in (%1) do md "%%a\%%b\%%c" 09.
> && move %1 "%%a\%%b\%%c" 10.
> goto eof 11.
> 12.
> :ende 13.
> 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.
bastla schreibt am 15.04.2007 um 19:45:01 Uhr
Hallo miniversum!
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
etc behelfen.
Grüße
bastla
[Edit] @miniversum: Hatte Deine Edits nicht gesehen ... [/Edit]
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
01.
if "%Album:~0,1%"==" " set "Album=%Album:~1%" 02.
if "%Album:~-1%"==" " set "Album=%Album:~0,-1%"Grüße
bastla
[Edit] @miniversum: Hatte Deine Edits nicht gesehen ... [/Edit]
robcomboy schreibt am 15.04.2007 um 19:49:25 Uhr
Ok macht Sinn.
Wären dann auch Bindestriche
abgedeckt???
Ich korrigiere meins dannochmal zu:
<code>@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
Wären dann auch Bindestriche
abgedeckt???
Ich korrigiere meins dannochmal zu:
<code>@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.
bastla schreibt am 15.04.2007 um 20:57:29 Uhr
Hallo robcomboy!
Ich mag es ja noch immer nicht wahrhaben, dass die Übergabe eines Pfades nicht klappt, daher vielleicht folgende Variante:
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]
Ich mag es ja noch immer nicht wahrhaben, dass die Übergabe eines Pfades nicht klappt, daher vielleicht folgende Variante:
01.
Set fso = CreateObject("Scripting.FileSystemObject") 02.
If WScript.Arguments.Count >=1 Then 03.
If fso.FolderExists(WScript.Arguments(0)) Then BasisPfad = WScript.Arguments(0) 04.
End If 05.
If BasisPfad = "" Then 06.
Set Verzeichnis = CreateObject("Shell.Application") _ 07.
.BrowseForFolder(0, "Datei oder Verzeichnis wählen", 0, 17) 08.
If TypeName(Verzeichnis) = "Nothing" Then WScript.Quit(1) 09.
Set Basis = Verzeichnis.Self 10.
BasisPfad = Basis.Path 11.
End If 12.
For Each Datei In fso.GetFolder(BasisPfad).Files 13.
If Right(Datei.Name, 4) = ".m3u" Then 14.
Ordner = Split(Left(Datei.Name, Len(Datei.Name) - 4), " - ") 15.
Pfad = BasisPfad 16.
For i = 0 To UBound(Ordner) 17.
Pfad = Pfad & "\" & Trim(Ordner(i)) 18.
If Not fso.FolderExists(Pfad) Then fso.CreateFolder(Pfad) 19.
Next 20.
Datei.Move Pfad & "\" 21.
End If 22.
Next 23.
WScript.Echo "Fertig."Grüße
bastla
[Edit] Trennzeichen auf " - " geändert. [/Edit]
robcomboy schreibt am 15.04.2007 um 21:25:53 Uhr
Hallo robcomboy!
Ich mag es ja noch immer nicht wahrhaben,
dass die Übergabe eines Pfades nicht
klappt, daher vielleicht folgende Variante:
Ich mag es ja noch immer nicht wahrhaben,
dass die Übergabe eines Pfades nicht
klappt, daher vielleicht folgende Variante:
01.
Set fso = 02.
> CreateObject("Scripting.FileSystemObject") 03.
> If WScript.Arguments.Count >=1 Then 04.
> If fso.FolderExists(WScript.Arguments(0)) 05.
> Then BasisPfad = WScript.Arguments(0) 06.
> End If 07.
> If BasisPfad = "" Then 08.
> Set Verzeichnis = 09.
> CreateObject("Shell.Application") 10.
> _ 11.
> .BrowseForFolder(0, "Datei oder 12.
> Verzeichnis wählen", 0, 17) 13.
> If TypeName(Verzeichnis) = 14.
> "Nothing" Then WScript.Quit(1) 15.
> Set Basis = Verzeichnis.Self 16.
> BasisPfad = Basis.Path 17.
> End If 18.
> For Each Datei In 19.
> fso.GetFolder(BasisPfad).Files 20.
> If Right(Datei.Name, 4) = 21.
> ".m3u" Then 22.
> Ordner = Split(Left(Datei.Name, 23.
> Len(Datei.Name) - 4), "-") 24.
> Pfad = BasisPfad 25.
> For i = 0 To UBound(Ordner) 26.
> Pfad = Pfad & "\" 27.
> & Trim(Ordner(i)) 28.
> If Not fso.FolderExists(Pfad) 29.
> Then fso.CreateFolder(Pfad) 30.
> Next 31.
> Datei.Move Pfad & "\" 32.
> End If 33.
> Next 34.
> WScript.Echo "Fertig." 35.
> gültigen Pfades als Argument wird dieser
verwendet, im anderen Fall landest Du in
einem Verzeichnisauswahldialog.
Grüße
bastla
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!!!!
robcomboy schreibt am 15.04.2007 um 22:03:13 Uhr
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):
Mein bestes Angebot dafür sieht so aus
(bitte ganze Zeile 7 - wegen der
Textkorrektur - oder zumindest in dieser
Zeile 0 durch 16 ersetzen):
01.
.BrowseForFolder(0, 02.
> "Verzeichnis wählen", 03.
> <b>16</b>, 17) 04.
> 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
bastla schreibt am 15.04.2007 um 22:30:07 Uhr
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:
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
"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:
01.
'OrdnerStrukturErzeugen.vbs 02.
'Argumente: [BasisPfad] [DateiTyp] 03.
Set fso = CreateObject("Scripting.FileSystemObject") 04.
If WScript.Arguments.Count >=1 Then 05.
If fso.FolderExists(WScript.Arguments(0)) Then BasisPfad = WScript.Arguments(0) 06.
End If 07.
If BasisPfad = "" Then 08.
Set Verzeichnis = CreateObject("Shell.Application") _ 09.
.BrowseForFolder(0, "Datei oder Verzeichnis wählen", 16, 17) 10.
If TypeName(Verzeichnis) = "Nothing" Then WScript.Quit(1) 11.
Set Basis = Verzeichnis.Self 12.
BasisPfad = Basis.Path 13.
End If 14.
If WScript.Arguments.Count >=2 Then 15.
DateiTyp = WScript.Arguments(1) 16.
Else 17.
DateiTyp = InputBox("Gesuchten Dateityp eingeben!", "Typ?", "m3u") 18.
If DateiTyp = "" Then WScript.Quit(1) 19.
End If 20.
DateiTyp = LCase(DateiTyp) 21.
If Left(DateiTyp, 1) <> "." Then DateiTyp = "." & DateiTyp 22.
For Each Datei In fso.GetFolder(BasisPfad).Files 23.
Typ = LCase(Mid(Datei.Name, InstrRev(Datei.Name, "."))) 24.
If Typ = DateiTyp Then 25.
Ordner = Split(Left(Datei.Name, Len(Datei.Name) - Len(Typ)), "-") 26.
Pfad = BasisPfad 27.
For i = 0 To UBound(Ordner) 28.
Pfad = Pfad & "\" & Trim(Ordner(i)) 29.
If Not fso.FolderExists(Pfad) Then fso.CreateFolder(Pfad) 30.
Next 31.
Datei.Move Pfad & "\" 32.
End If 33.
Next 34.
WScript.Echo "Fertig."Offen bleibt noch zumindest eine Fehlerbehandlung bei bereits existierenden Dateien im Zielverzeichnis.
Grüße
bastla
robcomboy schreibt am 15.04.2007 um 23:11:28 Uhr
Hallo robcomboy!
>Umsomehr stört mich, dass die Übergabevon 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.
Was meinst DU mit "für das
Splitten berücksichtigen.
"
dadurch wären dann auch Namen mit enthaltenem
"-" korrekt zu verarbeiten ...
"-" korrekt zu verarbeiten ...
Läßt sich das realisieren?
Offen bleibt noch zumindest eine
Fehlerbehandlung bei bereits existierenden
Dateien im Zielverzeichnis.
Fehlerbehandlung bei bereits existierenden
Dateien im Zielverzeichnis.
Ansatz wäre hier existierenden umzubenennen.
Grüße, robcomboy
bastla schreibt am 15.04.2007 um 23:21:22 Uhr
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:
In dieser Zeile wird der Dateiname mit der "Split()"-Funktion in Ordnerebenen (Artist\Album\Diskxx) aufgeteilt.
Bereits vorhandene Dateien:
Grüße
bastla
... der heute sicher nix mehr umbenennt ...
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:
01.
Ordner = Split(Left(Datei.Name, Len(Datei.Name) - Len(Typ)), " - ")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 ...
robcomboy schreibt am 15.04.2007 um 23:32:34 Uhr
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:
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:
01.
Ordner = 02.
> Split(Left(Datei.Name, Len(Datei.Name) - 03.
> Len(Typ)), " - ") 04.
> 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
...
"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
Biber schreibt am 16.04.2007 um 00:51:08 Uhr
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
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
miniversum schreibt am 16.04.2007 um 11:01:10 Uhr
So nach ein paar Stunden Schlaf und nem Kaffee hab ich jetzt die Batch zum laufen gebracht und getestet.
Liegt diese im Verzeichnis mit den Playlists werde alle nach einander umgewandelt.
miniversum
01.
@echo off & setlocal enabledelayedexpansion 02.
03.
for /F "delims=" %%a in ('dir /b /A-D *.m3u') do call:dodir "%%a" 04.
goto ende 05.
06.
:dodir 07.
08.
for /F "delims=" %%a in (%1) do set "file=%%~na" 09.
for /F "tokens=1-3 delims=-" %%a in ("%file%") do ( 10.
11.
set "myartist=%%a" 12.
set "myalbum=%%b" 13.
set "mytitel=%%c" 14.
15.
md "!myartist:~0,-1!\!myalbum:~1,-1!\!mytitel:~1!" 16.
move %1 "!myartist:~0,-1!\!myalbum:~1,-1!\!mytitel:~1!" 17.
) 18.
goto ende 19.
20.
:endeminiversum
robcomboy schreibt am 16.04.2007 um 23:04:37 Uhr
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
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
robcomboy schreibt am 16.04.2007 um 23:11:20 Uhr
So nach ein paar Stunden Schlaf und nem
Kaffee hab ich jetzt die Batch zum laufen
gebracht und getestet.
Kaffee hab ich jetzt die Batch zum laufen
gebracht und getestet.
01.
@echo off & setlocal 02.
> enabledelayedexpansion 03.
> 04.
> for /F "delims=" %%a in ('dir 05.
> /b /A-D *.m3u') do call:dodir 06.
> "%%a" 07.
> goto ende 08.
> 09.
> :dodir 10.
> 11.
> for /F "delims=" %%a in (%1) do 12.
> set "file=%%~na" 13.
> for /F "tokens=1-3 delims=-" %%a 14.
> in ("%file%") do ( 15.
> 16.
> set "myartist=%%a" 17.
> set "myalbum=%%b" 18.
> set "mytitel=%%c" 19.
> 20.
> md 21.
> "!myartist:~0,-1!\!myalbum:~1,-1!\!mytitel:~1!" 22.
> move %1 23.
> "!myartist:~0,-1!\!myalbum:~1,-1!\!mytitel:~1!" 24.
> ) 25.
> goto ende 26.
> 27.
> :ende 28.
> Liegt diese im Verzeichnis mit den Playlists
werde alle nach einander umgewandelt.
miniversum
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
miniversum schreibt am 17.04.2007 um 09:06:54 Uhr
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
Eben immer die Kombination mit " - " getrennt.
Bei mir gehts.
Fehlt bei jedem Ordner der letzte Buchstabe oder nur bei einem der drei Ordner?
miniversum
miniversum schreibt am 17.04.2007 um 09:43:15 Uhr
01.
@echo off & setlocal enabledelayedexpansion 02.
03.
for /F "delims=" %%a in ('dir /b /A-D *.m3u') do call:dodir "%%a" 04.
goto ende 05.
06.
:dodir 07.
08.
for /F "delims=" %%a in (%1) do set "file=%%~na" 09.
for /F "tokens=1-3 delims=-" %%a in ("%file%") do ( 10.
11.
set "myartist=%%a" 12.
set "myalbum=%%b" 13.
set "mytitel=%%c" 14.
15.
echo Playlist=[%1]>>Log.txt 16.
echo Artist=[!myartist:~0,-1!]>>Log.txt 17.
echo Album=[!myalbum:~1,-1!]>>Log.txt 18.
echo Titel=[!mytitel:~1!]>>Log.txt 19.
echo.>>Log.txt 20.
21.
md "!myartist:~0,-1!\!myalbum:~1,-1!\!mytitel:~1!" 22.
move %1 "!myartist:~0,-1!\!myalbum:~1,-1!\!mytitel:~1!" 23.
) 24.
goto ende 25.
26.
:endeLass diese mal laufen. Dabei wir wird dir eine Datei log.txt erstellt. Poste mal bitte diese log.txt (zumindest auszugsweise)
miniversum
robcomboy schreibt am 17.04.2007 um 10:04:15 Uhr
01.
@echo off & setlocal 02.
> enabledelayedexpansion 03.
> 04.
> for /F "delims=" %%a in ('dir 05.
> /b /A-D *.m3u') do call:dodir 06.
> "%%a" 07.
> goto ende 08.
> 09.
> :dodir 10.
> 11.
> for /F "delims=" %%a in (%1) do 12.
> set "file=%%~na" 13.
> for /F "tokens=1-3 delims=-" %%a 14.
> in ("%file%") do ( 15.
> 16.
> set "myartist=%%a" 17.
> set "myalbum=%%b" 18.
> set "mytitel=%%c" 19.
> 20.
> echo Playlist=[%1]>>Log.txt 21.
> echo 22.
> Artist=[!myartist:~0,-1!]>>Log.txt 23.
> echo Album=[!myalbum:~1,-1!]>>Log.txt 24.
> echo Titel=[!mytitel:~1!]>>Log.txt 25.
> echo.>>Log.txt 26.
> 27.
> md 28.
> "!myartist:~0,-1!\!myalbum:~1,-1!\!mytitel:~1!" 29.
> move %1 30.
> "!myartist:~0,-1!\!myalbum:~1,-1!\!mytitel:~1!" 31.
> ) 32.
> goto ende 33.
> 34.
> :ende 35.
> 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.
[code]
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 ]
[/code]
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
miniversum schreibt am 17.04.2007 um 11:00:23 Uhr
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:
miniversum
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
test1
test2
miniversum
bastla schreibt am 17.04.2007 um 11:32:10 Uhr
Hallo robcomboy!
Grüße
bastla
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,"Kopie von test - test1 - test2 - test3 - test4.m3u"
- 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
robcomboy schreibt am 17.04.2007 um 11:33:04 Uhr
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
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
robcomboy schreibt am 17.04.2007 um 11:43:11 Uhr
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,
oder
Grüße
bastla
> 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
oder
- welche der Teilbestandteile (nach welchen
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
robcomboy schreibt am 17.04.2007 um 12:52:28 Uhr
Hallo robcomboy!
Hast Du
[http://www.administrator.de/index.php?content=04d4dfa9c95b5b53945fd4cc7ce4f909#227915
das] schon versucht (vielleicht sogar mit
einem Aufruf der folgenden Art)?
Hast Du
[http://www.administrator.de/index.php?content=04d4dfa9c95b5b53945fd4cc7ce4f909#227915
das] schon versucht (vielleicht sogar mit
einem Aufruf der folgenden Art)?
01.
OrdnerStrukturErzeugen.vbs 02.
> D:\StartOrdner m3u 03.
> 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.
miniversum schreibt am 17.04.2007 um 17:36:31 Uhr
So jetzt mal die kurze Batch Lösung die nur auf " - " reagiert und mehrere Verzeichnistiefen kann:
miniversum
PS: so einfach lass ich das mit dem vbs ja nicht auf mir sitzen hehe
01.
@echo off 02.
03.
for /F "delims=" %%a in ('dir /b /A-D *.m3u') do call:dodir "%%~na" 04.
goto ende 05.
06.
:dodir 07.
set "file=%1" 08.
set fulldir="%file: - =\%" 09.
md %fulldir% 10.
move %1 %fulldir% 11.
goto ende 12.
13.
:endeminiversum
PS: so einfach lass ich das mit dem vbs ja nicht auf mir sitzen hehe
bastla schreibt am 17.04.2007 um 18:31:57 Uhr
@miniversum
Das mit dem Ersetzen ist ein gute Idee.
Den Rest würde ich vielleicht eher so schreiben (dann klappt's auch mit dem "move" und mit dazwischengestreuten Leerstellen):
Grüße
bastla
Das mit dem Ersetzen ist ein gute Idee.
Den Rest würde ich vielleicht eher so schreiben (dann klappt's auch mit dem "move" und mit dazwischengestreuten Leerstellen):
01.
@echo off 02.
03.
for /F "delims=" %%a in ('dir /b /A-D *.m3u') do call:dodir "%%a" 04.
goto :eof 05.
06.
:dodir 07.
set "file=%~n1" 08.
set "fulldir=%file: - =\%" 09.
md "%fulldir%" 10.
move %1 "%fulldir%"Grüße
bastla
robcomboy schreibt am 17.04.2007 um 20:39:30 Uhr
So jetzt mal die kurze Batch Lösung die
nur auf " - " reagiert und mehrere
Verzeichnistiefen kann:
nur auf " - " reagiert und mehrere
Verzeichnistiefen kann:
01.
> @echo off 02.
> 03.
> for /F "delims=" %%a in ('dir 04.
> /b /A-D *.m3u') do call:dodir 05.
> "%%~na" 06.
> goto ende 07.
> 08.
> :dodir 09.
> set "file=%1" 10.
> set fulldir="%file: - =\%" 11.
> md %fulldir% 12.
> move %1 %fulldir% 13.
> goto ende 14.
> 15.
> :ende 16.
> 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
robcomboy schreibt am 17.04.2007 um 20:46:15 Uhr
So jetzt mal die kurze Batch Lösung die
nur auf " - " reagiert und mehrere
Verzeichnistiefen kann:
nur auf " - " reagiert und mehrere
Verzeichnistiefen kann:
01.
> @echo off 02.
> 03.
> for /F "delims=" %%a in ('dir 04.
> /b /A-D *.m3u') do call:dodir 05.
> "%%~na" 06.
> goto ende 07.
> 08.
> :dodir 09.
> set "file=%1" 10.
> set fulldir="%file: - =\%" 11.
> md %fulldir% 12.
> move %1 %fulldir% 13.
> goto ende 14.
> 15.
> :ende 16.
> miniversum
PS: so einfach lass ich das mit dem vbs ja
nicht auf mir sitzen hehe
Die hier funktioniert.
Gruß, robcomboy
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...
Hier nun mein Script ohne delayedexpansion
Beide Batch-Dateien liefern das selbe Ergebnis.
@bastla: Danke für die Korrektur
Grüsse,
wobleibtdiezeit
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...
01.
@echo off 02.
setlocal enabledelayedexpansion 03.
cls 04.
05.
:abfrageanfang 06.
07.
echo \\\ -I-N-F-O-S- /// 08.
echo -==/==========================================================================- 09.
ECHO .. Angaben zur Dateiendung 10.
echo -==/==========================================================================- 11.
echo. 12.
set /p dateiendung= == Dateiendung mit Punkt angeben: 13.
cls 14.
echo \\\ -I-N-F-O-S- /// 15.
echo -==/==========================================================================- 16.
ECHO .. Angaben zu Trennungszeichen 17.
echo -==/==========================================================================- 18.
echo -==/==========================================================================- 19.
ECHO .. -Trennungszeichen von der laengsten zur kuerzesten Zeichenkette angeben. 20.
ECHO .. -Mit ENTER wird Abfrage abgebrochen und bisherige Eingaben ausgefuehrt. 21.
echo -==/==========================================================================- 22.
echo. 23.
set /p fulldir1_choice= == Trennungszeichen [1/9]: 24.
if "%fulldir1_choice%" == "" goto abfrageende 25.
set /p fulldir2_choice= == Trennungszeichen [2/9]: 26.
if "%fulldir2_choice%" == "" goto abfrageende 27.
set /p fulldir3_choice= == Trennungszeichen [3/9]: 28.
if "%fulldir3_choice%" == "" goto abfrageende 29.
set /p fulldir4_choice= == Trennungszeichen [4/9]: 30.
if "%fulldir4_choice%" == "" goto abfrageende 31.
set /p fulldir5_choice= == Trennungszeichen [5/9]: 32.
if "%fulldir5_choice%" == "" goto abfrageende 33.
set /p fulldir6_choice= == Trennungszeichen [6/9]: 34.
if "%fulldir6_choice%" == "" goto abfrageende 35.
set /p fulldir7_choice= == Trennungszeichen [7/9]: 36.
if "%fulldir7_choice%" == "" goto abfrageende 37.
set /p fulldir8_choice= == Trennungszeichen [8/9]: 38.
if "%fulldir8_choice%" == "" goto abfrageende 39.
set /p fulldir9_choice= == Trennungszeichen [9/9]: 40.
if "%fulldir9_choice%" == "" goto abfrageende 41.
42.
:abgeschlossen 43.
44.
cls 45.
echo. 46.
echo -==/==========================================================================- 47.
ECHO .. Ausfuehrung der Operation 48.
echo -==/==========================================================================- 49.
echo. 50.
echo == Operation abgeschlossen. 51.
echo. 52.
pause 53.
54.
goto :eof 55.
56.
:abfrageende 57.
58.
cls 59.
echo. 60.
echo -==/==========================================================================- 61.
ECHO .. Ausfuehrung der Operation 62.
echo -==/==========================================================================- 63.
echo. 64.
echo == wait... 65.
echo. 66.
67.
if "%fulldir1_choice%" == "" set fulldir1_choice="" 68.
if "%fulldir2_choice%" == "" set fulldir2_choice="" 69.
if "%fulldir3_choice%" == "" set fulldir3_choice="" 70.
if "%fulldir4_choice%" == "" set fulldir4_choice="" 71.
if "%fulldir5_choice%" == "" set fulldir5_choice="" 72.
if "%fulldir6_choice%" == "" set fulldir6_choice="" 73.
if "%fulldir7_choice%" == "" set fulldir7_choice="" 74.
if "%fulldir8_choice%" == "" set fulldir8_choice="" 75.
if "%fulldir9_choice%" == "" set fulldir9_choice="" 76.
77.
for /F "delims=" %%a in ('dir /b /A-D *%dateiendung%') do call:dodir "%%a" 78.
goto :abgeschlossen 79.
80.
:dodir 81.
82.
set "fulldir0=%~n1" 83.
set "fulldir1=!fulldir0:%fulldir1_choice%=\!" 84.
85.
set "fulldir2=%fulldir1%" 86.
set "fulldir2=!fulldir1:%fulldir2_choice%=\!" 87.
88.
set "fulldir3=%fulldir2%" 89.
set "fulldir3=!fulldir2:%fulldir3_choice%=\!" 90.
91.
set "fulldir4=%fulldir3%" 92.
set "fulldir4=!fulldir3:%fulldir4_choice%=\!" 93.
94.
set "fulldir5=%fulldir4%" 95.
set "fulldir5=!fulldir4:%fulldir5_choice%=\!" 96.
97.
set "fulldir6=%fulldir5%" 98.
set "fulldir6=!fulldir5:%fulldir6_choice%=\!" 99.
100.
set "fulldir7=%fulldir6%" 101.
set "fulldir7=!fulldir6:%fulldir7_choice%=\!" 102.
103.
set "fulldir8=%fulldir7%%" 104.
set "fulldir8=!fulldir7:%fulldir8_choice%=\!" 105.
106.
set "fulldir9=%fulldir8%" 107.
set "fulldir9=!fulldir8:%fulldir9_choice%=\!" 108.
109.
md "%fulldir9%" 110.
move %1 "%fulldir9%" 111.
112.
:eofHier nun mein Script ohne delayedexpansion
01.
@echo off 02.
cls 03.
04.
:abfrageanfang 05.
06.
echo \\\ -I-N-F-O-S- /// 07.
echo -==/==========================================================================- 08.
ECHO .. Angaben zur Dateiendung 09.
echo -==/==========================================================================- 10.
echo. 11.
set /p dateiendung= == Dateiendung mit Punkt angeben: 12.
cls 13.
echo \\\ -I-N-F-O-S- /// 14.
echo -==/==========================================================================- 15.
ECHO .. Angaben zu Trennungszeichen 16.
echo -==/==========================================================================- 17.
echo -==/==========================================================================- 18.
ECHO .. -Trennungszeichen von der laengsten zur kuerzesten Zeichenkette angeben. 19.
ECHO .. -Mit ENTER wird Abfrage abgebrochen und bisherige Eingaben ausgefuehrt. 20.
echo -==/==========================================================================- 21.
echo. 22.
set /p fulldir1_choice= == Trennungszeichen [1/9]: 23.
if "%fulldir1_choice%" == "" goto abfrageende 24.
set /p fulldir2_choice= == Trennungszeichen [2/9]: 25.
if "%fulldir2_choice%" == "" goto abfrageende 26.
set /p fulldir3_choice= == Trennungszeichen [3/9]: 27.
if "%fulldir3_choice%" == "" goto abfrageende 28.
set /p fulldir4_choice= == Trennungszeichen [4/9]: 29.
if "%fulldir4_choice%" == "" goto abfrageende 30.
set /p fulldir5_choice= == Trennungszeichen [5/9]: 31.
if "%fulldir5_choice%" == "" goto abfrageende 32.
set /p fulldir6_choice= == Trennungszeichen [6/9]: 33.
if "%fulldir6_choice%" == "" goto abfrageende 34.
set /p fulldir7_choice= == Trennungszeichen [7/9]: 35.
if "%fulldir7_choice%" == "" goto abfrageende 36.
set /p fulldir8_choice= == Trennungszeichen [8/9]: 37.
if "%fulldir8_choice%" == "" goto abfrageende 38.
set /p fulldir9_choice= == Trennungszeichen [9/9]: 39.
if "%fulldir9_choice%" == "" goto abfrageende 40.
41.
:abfrageende 42.
43.
cls 44.
echo. 45.
echo -==/==========================================================================- 46.
ECHO .. Ausfuehrung der Operation 47.
echo -==/==========================================================================- 48.
echo. 49.
echo == wait... 50.
echo. 51.
52.
if "%fulldir1_choice%" == "" set fulldir1_choice="" 53.
if "%fulldir2_choice%" == "" set fulldir2_choice="" 54.
if "%fulldir3_choice%" == "" set fulldir3_choice="" 55.
if "%fulldir4_choice%" == "" set fulldir4_choice="" 56.
if "%fulldir5_choice%" == "" set fulldir5_choice="" 57.
if "%fulldir6_choice%" == "" set fulldir6_choice="" 58.
if "%fulldir7_choice%" == "" set fulldir7_choice="" 59.
if "%fulldir8_choice%" == "" set fulldir8_choice="" 60.
if "%fulldir9_choice%" == "" set fulldir9_choice="" 61.
62.
:: --- 63.
64.
set ordnerstruktur_var=Ordnerstruktur.aus.Dateinamen.erstellen_exec.bat 65.
del /f /q %ordnerstruktur_var% 2>Nul 66.
67.
echo @echo off>%ordnerstruktur_var% 68.
echo cls>>%ordnerstruktur_var% 69.
70.
echo for /F "delims=" %%%%a in ('dir /b /A-D *%dateiendung%') do call:dodir "%%%%a">>%ordnerstruktur_var% 71.
echo exit>>%ordnerstruktur_var% 72.
73.
echo :dodir>>%ordnerstruktur_var% 74.
75.
echo set "fulldir0=%%~n1">>%ordnerstruktur_var% 76.
echo set "fulldir1=%%fulldir0:%fulldir1_choice%=\%%">>%ordnerstruktur_var% 77.
78.
echo set "fulldir2=%%fulldir1%%">>%ordnerstruktur_var% 79.
echo set "fulldir2=%%fulldir1:%fulldir2_choice%=\%%">>%ordnerstruktur_var% 80.
81.
echo set "fulldir3=%%fulldir2%%">>%ordnerstruktur_var% 82.
echo set "fulldir3=%%fulldir2:%fulldir3_choice%=\%%">>%ordnerstruktur_var% 83.
84.
echo set "fulldir4=%%fulldir3%%">>%ordnerstruktur_var% 85.
echo set "fulldir4=%%fulldir3:%fulldir4_choice%=\%%">>%ordnerstruktur_var% 86.
87.
echo set "fulldir5=%%fulldir4%%">>%ordnerstruktur_var% 88.
echo set "fulldir5=%%fulldir4:%fulldir5_choice%=\%%">>%ordnerstruktur_var% 89.
90.
echo set "fulldir6=%%fulldir5%%">>%ordnerstruktur_var% 91.
echo set "fulldir6=%%fulldir5:%fulldir6_choice%=\%%">>%ordnerstruktur_var% 92.
93.
echo set "fulldir7=%%fulldir6%%">>%ordnerstruktur_var% 94.
echo set "fulldir7=%%fulldir6:%fulldir7_choice%=\%%">>%ordnerstruktur_var% 95.
96.
echo set "fulldir8=%%fulldir7%%">>%ordnerstruktur_var% 97.
echo set "fulldir8=%%fulldir7:%fulldir8_choice%=\%%">>%ordnerstruktur_var% 98.
99.
echo set "fulldir9=%%fulldir8%%">>%ordnerstruktur_var% 100.
echo set "fulldir9=%%fulldir8:%fulldir9_choice%=\%%">>%ordnerstruktur_var% 101.
102.
echo :dodirend>>%ordnerstruktur_var% 103.
104.
echo md "%%fulldir9%%">>%ordnerstruktur_var% 105.
echo move %%1 "%%fulldir9%%">>%ordnerstruktur_var% 106.
107.
start /B /wait %ordnerstruktur_var% 108.
109.
:: --- 110.
111.
del /f /q %ordnerstruktur_var% 2>Nul 112.
113.
cls 114.
echo. 115.
echo -==/==========================================================================- 116.
ECHO .. Ausfuehrung der Operation 117.
echo -==/==========================================================================- 118.
echo. 119.
echo == Operation abgeschlossen. 120.
echo. 121.
pause 122.
123.
:: --- 124.
125.
:eofBeide Batch-Dateien liefern das selbe Ergebnis.
@bastla: Danke für die Korrektur
Grüsse,
wobleibtdiezeit
Biber schreibt am 19.04.2007 um 19:29:32 Uhr
Moin, wobleibtdiezeit,
schön, dass Du auch mitmischt...
@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
schön, dass Du auch mitmischt...
@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
bastla schreibt am 19.04.2007 um 19:44:38 Uhr
robcomboy schreibt am 19.04.2007 um 20:03:09 Uhr
@bastla
Nein, ist auch bei mir nicht reprozierbar...
*ratlos guck*
@robcomboy
Du hast auch nicht zufällig die Ursache
inzwischen gefunden?
Gruss
Biber
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
robcomboy schreibt am 19.04.2007 um 20:12:55 Uhr
@bastla
Nein, ist auch bei mir nicht reprozierbar...
*ratlos guck*
@robcomboy
Du hast auch nicht zufällig die Ursache
inzwischen gefunden?
Gruss
Biber
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.
bastla schreibt am 19.04.2007 um 20:56:18 Uhr
Hallo robcomboy!
Das ist schade, denn ich muss ja mit den Batchern mithalten
und habe das Script noch ein wenig aufgebohrt:
Jetzt würde das Script folgenden Aufruf erlauben:
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
auch ein anderes Zeichen festgelegt werden.
Grüße
bastla
Das ist schade, denn ich muss ja mit den Batchern mithalten
01.
'MacheOrdner.vbs 02.
'Argumente: [BasisPfad] [[.]DateiTyp] [Suchstring[:Suchstring]] 03.
Const DD = ":" 04.
Set fso = CreateObject("Scripting.FileSystemObject") 05.
If WScript.Arguments.Count >=1 Then 06.
If fso.FolderExists(WScript.Arguments(0)) Then BasisPfad = WScript.Arguments(0) 07.
End If 08.
If BasisPfad = "" Then 09.
Set Verzeichnis = CreateObject("Shell.Application") _ 10.
.BrowseForFolder(0, "Datei oder Verzeichnis wählen", 16, 17) 11.
If TypeName(Verzeichnis) = "Nothing" Then WScript.Quit(1) 12.
Set Basis = Verzeichnis.Self 13.
BasisPfad = Basis.Path 14.
End If 15.
If WScript.Arguments.Count >=2 Then 16.
DateiTyp = WScript.Arguments(1) 17.
Else 18.
DateiTyp = InputBox("Gesuchten Dateityp eingeben!", "Typ?", "m3u") 19.
If DateiTyp = "" Then WScript.Quit(1) 20.
End If 21.
If WScript.Arguments.Count >=3 Then 22.
Delims = WScript.Arguments(2) 23.
Else 24.
Delims = InputBox("Alle gewünschten Trennzeichen mit '" & DD & "' unterteilt eingeben!", "Trennzeichen?") 25.
If Delims = "" Then WScript.Quit(1) 26.
End If 27.
Trenn=Split(Delims, DD) 28.
DateiTyp = LCase(DateiTyp) 29.
If Left(DateiTyp, 1) <> "." Then DateiTyp = "." & DateiTyp 30.
For Each Datei In fso.GetFolder(BasisPfad).Files 31.
Typ = LCase(Mid(Datei.Name, InstrRev(Datei.Name, "."))) 32.
If Typ = DateiTyp Then 33.
DName = Left(Datei.Name, Len(Datei.Name) - Len(Typ)) 34.
For i = 0 To UBound(Trenn) 35.
DName = Replace(DName, Trenn(i), DD) 36.
Next 37.
DName = Replace(DName, DD & DD, DD) 38.
Ordner = Split(DName, DD) 39.
Pfad = BasisPfad 40.
For i = 0 To UBound(Ordner) 41.
Pfad = Pfad & "\" & Trim(Ordner(i)) 42.
If Not fso.FolderExists(Pfad) Then fso.CreateFolder(Pfad) 43.
Next 44.
Datei.Move Pfad & "\" 45.
End If 46.
Next 47.
WScript.Echo "Fertig."01.
MacheOrdner.vbs "D:\Musik und so" .m3u " - :#:_"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
01.
Const DD = ":"Grüße
bastla
robcomboy schreibt am 19.04.2007 um 21:27:21 Uhr
Hallo robcomboy!
Das ist schade, denn ich muss ja mit den
Batchern mithalten
und habe das Script
noch ein wenig aufgebohrt:
Das ist schade, denn ich muss ja mit den
Batchern mithalten
noch ein wenig aufgebohrt:
01.
'MacheOrdner.vbs 02.
> 'Argumente: [BasisPfad] [[.]DateiTyp] 03.
> [Suchstring[:Suchstring]] 04.
> Const DD = ":" 05.
> Set fso = 06.
> CreateObject("Scripting.FileSystemObject") 07.
> If WScript.Arguments.Count >=1 Then 08.
> If 09.
> fso.FolderExists(WScript.Arguments(0)) Then 10.
> BasisPfad = WScript.Arguments(0) 11.
> End If 12.
> If BasisPfad = "" Then 13.
> Set Verzeichnis = 14.
> CreateObject("Shell.Application") 15.
> _ 16.
> .BrowseForFolder(0, "Datei oder 17.
> Verzeichnis wählen", 16, 17) 18.
> If TypeName(Verzeichnis) = 19.
> "Nothing" Then WScript.Quit(1) 20.
> Set Basis = Verzeichnis.Self 21.
> BasisPfad = Basis.Path 22.
> End If 23.
> If WScript.Arguments.Count >=2 Then 24.
> DateiTyp = WScript.Arguments(1) 25.
> Else 26.
> DateiTyp = InputBox("Gesuchten 27.
> Dateityp eingeben!", "Typ?", 28.
> "m3u") 29.
> If DateiTyp = "" Then 30.
> WScript.Quit(1) 31.
> End If 32.
> If WScript.Arguments.Count >=3 Then 33.
> Delims = WScript.Arguments(2) 34.
> Else 35.
> Delims = InputBox("Alle 36.
> gewünschten Trennzeichen mit 37.
> '" & DD & "' 38.
> unterteilt eingeben!", 39.
> "Trennzeichen?") 40.
> If Delims = "" Then 41.
> WScript.Quit(1) 42.
> End If 43.
> Trenn=Split(Delims, DD) 44.
> DateiTyp = LCase(DateiTyp) 45.
> If Left(DateiTyp, 1) <> "." 46.
> Then DateiTyp = "." & DateiTyp 47.
> For Each Datei In 48.
> fso.GetFolder(BasisPfad).Files 49.
> Typ = LCase(Mid(Datei.Name, 50.
> InstrRev(Datei.Name, "."))) 51.
> If Typ = DateiTyp Then 52.
> DName = Left(Datei.Name, Len(Datei.Name) - 53.
> Len(Typ)) 54.
> For i = 0 To UBound(Trenn) 55.
> DName = Replace(DName, Trenn(i), DD) 56.
> Next 57.
> DName = Replace(DName, DD & DD, DD) 58.
> Ordner = Split(DName, DD) 59.
> Pfad = BasisPfad 60.
> For i = 0 To UBound(Ordner) 61.
> Pfad = Pfad & "\" 62.
> & Trim(Ordner(i)) 63.
> If Not fso.FolderExists(Pfad) 64.
> Then fso.CreateFolder(Pfad) 65.
> Next 66.
> Datei.Move Pfad & "\" 67.
> End If 68.
> Next 69.
> WScript.Echo "Fertig." 70.
> folgenden Aufruf erlauben:
01.
MacheOrdner.vbs "D:\Musik 02.
> und so" .m3u " - :#:_" 03.
> " - ", 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
"_".
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
01.
Const DD = ":" 02.
> festgelegt werden.
Grüße
bastla
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 !
robcomboy schreibt am 19.04.2007 um 21:58:21 Uhr
@bastla
Nein, ist auch bei mir nicht reprozierbar...
*ratlos guck*
@robcomboy
Du hast auch nicht zufällig die Ursache
inzwischen gefunden?
Gruss
Biber
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
miniversum schreibt am 20.04.2007 um 08:46:33 Uhr
Ok die Batch mit draufziehbarem Verzeichnis:
miniversum
01.
@echo off 02.
03.
pushd %1 04.
for /F "delims=" %%a in ('dir /b /A-D *.m3u') do call:dodir "%%a" 05.
popd 06.
goto :ende 07.
08.
:dodir 09.
set "file=%~n1" 10.
set "fulldir=%file: - =\%" 11.
md "%fulldir%" 12.
move %1 "%fulldir%" 13.
goto :ende 14.
15.
:endeminiversum
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...
http://www.administrator.de/index.php?con ...
... 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.
Grüsse,
wobleibtdiezeit
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...
http://www.administrator.de/index.php?con ...
... 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.
01.
@echo off 02.
03.
cd %~dp1 04.
%~d1 05.
06.
pushd %1 07.
for /F "delims=" %%a in ('dir /b /A-D *.m3u') do call:dodir "%%a" 08.
popd 09.
goto :ende 10.
11.
:dodir 12.
set "file=%~n1" 13.
set "fulldir=%file: - =\%" 14.
md "%fulldir%" 15.
move %1 "%fulldir%" 16.
goto :ende 17.
18.
:endeGrüsse,
wobleibtdiezeit
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.
Grüsse,
wobleibtdiezeit
-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.
01.
@echo off 02.
setlocal enabledelayedexpansion 03.
cls 04.
05.
cd /d %~dp1 06.
07.
:abfrageanfang 08.
09.
echo \\\ -I-N-F-O-S- /// 10.
echo -==/==========================================================================- 11.
ECHO .. Angaben zu Zeichen in Datei(en) 12.
echo -==/==========================================================================- 13.
echo -==/==========================================================================- 14.
ECHO .. -Beispiel fuer eine Dateieindung: *.m3u 15.
ECHO .. -Beispiel fuer mehrere Dateieindungen: *.m3u *.mp3 *.txt 16.
ECHO .. -Beispiel fuer ein Zeichen aus Dateinamen: *nelly* 17.
ECHO .. -Beispiel fuer mehrere Zeichen aus Dateinamen: *nelly* *timbaland* 18.
ECHO .. -Beispiel fuer Kombination aus Beispielen: *nelly*.mp3 *timbaland*.m3u 19.
echo -==/==========================================================================- 20.
echo. 21.
set /p zeichenausdatei= == Zeichen in Datei(en) angeben: 22.
23.
cls 24.
echo \\\ -I-N-F-O-S- /// 25.
echo -==/==========================================================================- 26.
ECHO .. Angaben zu Trennungszeichen in Dateinamen 27.
echo -==/==========================================================================- 28.
echo -==/==========================================================================- 29.
ECHO .. -Trennungszeichen von der laengsten zur kuerzesten Zeichenkette angeben. 30.
ECHO -Beispiel fuer Trennzeichen: 31.
echo "Nelly.Furtado.-.Loose_Promiscuous.mp3" 32.
echo "Nelly.Furtado.-.Loose_Say.It.Right.mp3" 33.
echo == Trennungszeichen [1/9]: .-. 34.
echo == Trennungszeichen [2/9]: _ 35.
ECHO .. -Mit ENTER wird Abfrage abgebrochen und bisherige Eingaben ausgefuehrt. 36.
echo -==/==========================================================================- 37.
echo. 38.
set /p fulldir1_choice= == Trennungszeichen [1/9]: 39.
if "%fulldir1_choice%" == "" goto abfrageende 40.
set /p fulldir2_choice= == Trennungszeichen [2/9]: 41.
if "%fulldir2_choice%" == "" goto abfrageende 42.
set /p fulldir3_choice= == Trennungszeichen [3/9]: 43.
if "%fulldir3_choice%" == "" goto abfrageende 44.
set /p fulldir4_choice= == Trennungszeichen [4/9]: 45.
if "%fulldir4_choice%" == "" goto abfrageende 46.
set /p fulldir5_choice= == Trennungszeichen [5/9]: 47.
if "%fulldir5_choice%" == "" goto abfrageende 48.
set /p fulldir6_choice= == Trennungszeichen [6/9]: 49.
if "%fulldir6_choice%" == "" goto abfrageende 50.
set /p fulldir7_choice= == Trennungszeichen [7/9]: 51.
if "%fulldir7_choice%" == "" goto abfrageende 52.
set /p fulldir8_choice= == Trennungszeichen [8/9]: 53.
if "%fulldir8_choice%" == "" goto abfrageende 54.
set /p fulldir9_choice= == Trennungszeichen [9/9]: 55.
if "%fulldir9_choice%" == "" goto abfrageende 56.
57.
:abgeschlossen 58.
59.
cls 60.
echo. 61.
echo -==/==========================================================================- 62.
ECHO .. Ausfuehrung der Operation 63.
echo -==/==========================================================================- 64.
echo. 65.
echo == Operation abgeschlossen. 66.
echo. 67.
pause 68.
69.
goto :eof 70.
71.
:abfrageende 72.
73.
cls 74.
echo. 75.
echo -==/==========================================================================- 76.
ECHO .. Ausfuehrung der Operation 77.
echo -==/==========================================================================- 78.
echo. 79.
echo == wait... 80.
echo. 81.
82.
if "%fulldir1_choice%" == "" set fulldir1_choice="" 83.
if "%fulldir2_choice%" == "" set fulldir2_choice="" 84.
if "%fulldir3_choice%" == "" set fulldir3_choice="" 85.
if "%fulldir4_choice%" == "" set fulldir4_choice="" 86.
if "%fulldir5_choice%" == "" set fulldir5_choice="" 87.
if "%fulldir6_choice%" == "" set fulldir6_choice="" 88.
if "%fulldir7_choice%" == "" set fulldir7_choice="" 89.
if "%fulldir8_choice%" == "" set fulldir8_choice="" 90.
if "%fulldir9_choice%" == "" set fulldir9_choice="" 91.
92.
pushd %1 93.
for /F "delims=" %%a in ('dir /b /A-D %zeichenausdatei%') do call:dodir "%%a" 94.
popd 95.
goto :abgeschlossen 96.
97.
:dodir 98.
99.
set "fulldir0=%~n1" 100.
set "fulldir1=!fulldir0:%fulldir1_choice%=\!" 101.
102.
set "fulldir2=%fulldir1%" 103.
set "fulldir2=!fulldir1:%fulldir2_choice%=\!" 104.
105.
set "fulldir3=%fulldir2%" 106.
set "fulldir3=!fulldir2:%fulldir3_choice%=\!" 107.
108.
set "fulldir4=%fulldir3%" 109.
set "fulldir4=!fulldir3:%fulldir4_choice%=\!" 110.
111.
set "fulldir5=%fulldir4%" 112.
set "fulldir5=!fulldir4:%fulldir5_choice%=\!" 113.
114.
set "fulldir6=%fulldir5%" 115.
set "fulldir6=!fulldir5:%fulldir6_choice%=\!" 116.
117.
set "fulldir7=%fulldir6%" 118.
set "fulldir7=!fulldir6:%fulldir7_choice%=\!" 119.
120.
set "fulldir8=%fulldir7%%" 121.
set "fulldir8=!fulldir7:%fulldir8_choice%=\!" 122.
123.
set "fulldir9=%fulldir8%" 124.
set "fulldir9=!fulldir8:%fulldir9_choice%=\!" 125.
126.
md "%fulldir9%" 127.
move %1 "%fulldir9%" 128.
129.
:eofGrüsse,
wobleibtdiezeit
miniversum schreibt am 20.04.2007 um 18:31:57 Uhr
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:
miniversum
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:
01.
@echo off 02.
echo mit %%1: [%1] 03.
echo mit %%^~dp1: [%~dp1] 04.
echo mit %%^~n1: [%~n1] 05.
echo mit %%^~x1: [%~x1] 06.
pauseminiversum
bastla schreibt am 20.04.2007 um 20:00:55 Uhr
Hallo robcomboy!
Diese Version unterstützt mehrere Extensions:
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 ...
Grüße
bastla
Diese Version unterstützt mehrere Extensions:
01.
'MacheOrdner2.vbs 02.
'Argumente: [BasisPfad] [[.]DateiTyp[ [.]DateiTyp]] [Suchstring[:Suchstring]] 03.
Const DD = ":" 04.
Set fso = CreateObject("Scripting.FileSystemObject") 05.
If WScript.Arguments.Count >=1 Then 06.
If fso.FolderExists(WScript.Arguments(0)) Then BasisPfad = WScript.Arguments(0) 07.
End If 08.
If BasisPfad = "" Then 09.
Set Verzeichnis = CreateObject("Shell.Application") _ 10.
.BrowseForFolder(0, "Datei oder Verzeichnis wählen", 16, 17) 11.
If TypeName(Verzeichnis) = "Nothing" Then WScript.Quit(1) 12.
Set Basis = Verzeichnis.Self 13.
BasisPfad = Basis.Path 14.
End If 15.
If WScript.Arguments.Count >=2 Then 16.
DateiTyp = WScript.Arguments(1) 17.
Else 18.
DateiTyp = InputBox("Gesuchten Dateityp eingeben," & vbCrLF & "mehrere Typen durch Leerstellen trennen!", "Typ?", "m3u") 19.
If DateiTyp = "" Then WScript.Quit(1) 20.
End If 21.
If WScript.Arguments.Count >=3 Then 22.
Delims = WScript.Arguments(2) 23.
Else 24.
Delims = InputBox("Alle gewünschten Trennzeichen mit '" & DD & "' unterteilt eingeben!", "Trennzeichen?", " - :#:_") 25.
If Delims = "" Then WScript.Quit(1) 26.
End If 27.
28.
Trenn = Split(Delims, DD) 29.
DateiTyp = LCase(DateiTyp) 30.
31.
For Each Datei In fso.GetFolder(BasisPfad).Files 32.
Typ = LCase(Mid(Datei.Name, InstrRev(Datei.Name, ".") + 1)) 33.
If Instr(DateiTyp, Typ) Then 34.
DName = Left(Datei.Name, Len(Datei.Name) - Len(Typ)) 35.
For i = 0 To UBound(Trenn) 36.
DName = Replace(DName, Trenn(i), DD) 37.
Next 38.
DName = Replace(DName, DD & DD, DD) 39.
Ordner = Split(DName, DD) 40.
Pfad = BasisPfad 41.
For i = 0 To UBound(Ordner) 42.
Pfad = Pfad & "\" & Trim(Ordner(i)) 43.
If Not fso.FolderExists(Pfad) Then fso.CreateFolder(Pfad) 44.
Next 45.
Datei.Move Pfad & "\" 46.
End If 47.
Next 48.
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 ...
Grüße
bastla
miniversum schreibt am 21.04.2007 um 16:38:39 Uhr
Ist nur Anzeigebedingt.
Hab nicht ausprobiert obs auch ohne geht.
miniversum
Hab nicht ausprobiert obs auch ohne geht.
miniversum
miniversum schreibt am 21.04.2007 um 16:43:58 Uhr
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
Aber eben kein generelles %~dp1. Das wollte ich damit sagen.
Ohne diese If Abfrage würde es sonst Fehler geben.
miniversum









45753schreibt am 19.04.2007 um 18:43:17 Uhr45753schreibt am 20.04.2007 um 11:21:14 Uhr45753schreibt am 20.04.2007 um 17:59:08 Uhr45753schreibt am 21.04.2007 um 11:16:48 Uhr45753schreibt am 20.04.2007 um 20:43:15 Uhr