focko
Goto Top

Batchdatei, die Dateien sortiert und Ordner erstellt

Liebe administrator.de-User, Programmierer und Entwickler,

ich suche eine Batchdatei, die mir ca. 1000 Dateien (Bilder) in Ordner steckt und zwar nach Beginn des Bilddateinamens.

z.B. heissen 150 Bilder "kreta001, kreta002, kreta003, ..."
diese Bilder sollten dann von meiner Batchdatei in einen Ordner gepackt werden, der dann "kreta" heisst.

Da ich mich mit Batchdateien noch nicht so gut auskenne bitte ich euch um Hilfe.

Vielen Dank im Voraus
MfG FocKo

PS: Meine Rechnerdaten:
- Tyan Tiger MP 2*1900+
- 1024 MB Arbeitsspeicher
- 540 GB HDD
- 256 MB MSI RX800GT

Content-Key: 48144

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

Ausgedruckt am: 29.03.2024 um 01:03 Uhr

Mitglied: bastla
bastla 07.01.2007 um 16:42:01 Uhr
Goto Top
Hallo FocKo und willkommen im Forum!

Du solltest vorweg genauer festlegen, nach welchen Kriterien die Ordnernamen aus den Bildnamen ermittelt werden sollen (erste 5 Zeichen, bis zum ersten Auftreten einer Ziffer, bis zum ersten "Nicht-Buchstaben", ...).

Grüße
bastla
Mitglied: miniversum
miniversum 07.01.2007 um 16:46:51 Uhr
Goto Top
Wie sollen den die Ordner benannt werden? Immer nach den ersten 5 Buchstaben oder wie ist die Systematik?

miniversum

Edit: Hmm mal wieder zu langsam...
Mitglied: FocKo
FocKo 07.01.2007 um 18:31:24 Uhr
Goto Top
Danke für deine schnell antwort.

ich möchte dass die ordner bis zum ersten "-" bennant werden (wenn z.b. eine datei kreta - 001 heisst) dann möchte ich dass die datei einen ordner erstellt der dann bis zum ersten "-" geht, in dem fall jetzt einen ordner mit "kreta".

mfg focko
Mitglied: miniversum
miniversum 07.01.2007 um 18:51:01 Uhr
Goto Top
Versuchs mal so (ungetestet):

@echo off

FOR /F "delims=-" %%i IN ('dir /b') DO md "%%i" 2>NUL & move "%%i*.*" "%%i/%%i*.*"

miniversum

Edit: Nach bastla's Hinweis " beim Move befehl angepasst.
Mitglied: Biber
Biber 07.01.2007 um 19:18:43 Uhr
Goto Top
Moin FocKo,

auch von mir willkommen.
Leider war ich nicht so schlau, nochmal nachzufragen, sondern habe Deine erste Anforderung ernstgenommen... *grummel*
z.B. heissen 150 Bilder "kreta001, kreta002, kreta003, ..."
Na ja, vielleicht braucht ja irgend jemand mal eine Variante für diese Mimik, der/die kann sich nochmal melden...

Die einfache Variante ist im Prinzip mit miniversums Einzeiler abzufackeln und sieht in epischer Breite so aus:
::---snipp Group-Bilder.bat---- Placed into the PD by Biber 2007
::---Variante für Dateien der Form "kreta - 001.jpg"... "Peine-4711.jpg" 
@echo off & setlocal EnableDelayedExpansion 
Set "bilderordner=Z:\bilder" && REM !!!!! HIER ANPASSEN!!!!!!  
Set "ZielordnerRoot=D:\Alle meine Urlaube" && REM !!!!! HIER ANPASSEN!!!!!!  
Set "lastgroup=nothing"  
:: Step 1 Dateien mit gleichem Namensbeginn ermitteln.
:: Unterstellung: Name setzt sich zusammen aus n Zeichen + "-" oder " -" + m Ziffern + Endung .jpg. 
Echo Moment...ermittle Gruppen...
For /f "delims=- " %%i in ('dir /b /o:n %bilderordner%\*-*.jpg') do (   
  (echo %%i|find /i "!lastgroup!">Nul) || (set "lastgroup=%%i" & set "allgroups=!allgroups! %%i")     
)
echo Gefundene Gruppen: %Allgroups%
If not Exist "%ZielOrdnerRoot%" ECHO md "%zielOrdnerRoot%"  
For %%i in (%Allgroups%) do (
        ECHO md "%zielOrdnerRoot%\%%i"  
        ECHO move "%bilderordner%\%%i*.jpg" "%zielOrdnerRoot%\%%i"  
)        
goto :eof
::---snipp Group-Bilder.bat----
Demo-Aufruf:
$cmd$group-bilder
Moment...ermittle Gruppen...
Gefundene Gruppen:  Ballermann berlin kreta NeueVahrSüd
md "D:\Alle meine Urlaube"  
md "D:\Alle meine Urlaube\Ballermann"  
move "Z:\bilder\Ballermann*.jpg" "D:\Alle meine Urlaube\Ballermann"  
md "D:\Alle meine Urlaube\berlin"  
move "Z:\bilder\berlin*.jpg" "D:\Alle meine Urlaube\berlin"  
md "D:\Alle meine Urlaube\kreta"  
move "Z:\bilder\kreta*.jpg" "D:\Alle meine Urlaube\kreta"  
md "D:\Alle meine Urlaube\NeueVahrSüd"  
move "Z:\bilder\NeueVahrSüd*.jpg" "D:\Alle meine Urlaube\NeueVahrSüd"  
[Die GROSS geschriebenen ECHO-Befehle zum Scharfmachen löschen.]
Der einzig nennenswerte Unterschied der Strategie zwischen miniversums und meiner Variante ist, dass ich zuerst alle "Gruppen", also die neuen Ordnernamen ermittle und dass bei mir Quell- und Zielordner unabhängig voneinander sind.

Gruß
Biber
P.S. Bin schon gespannt auf bastla's Variation des Themas....
P.P.S. Den Namen der Batchdatei spricht man/frau "Group-Bindestrich-Bilder"... die erste Variante für die erste Anforderung hieß "GroupBilder.bat."
Mitglied: bastla
bastla 07.01.2007 um 19:34:56 Uhr
Goto Top
@Biber

Ich wollt's eigentlich schon einstampfen, aber wenn Du neugierig bist ...
Im Prinzip die gleiche Logik wie bei miniversum, nur etwas ausgeschmückt (und inzwischen auch schon getestet face-wink):
@echo off & setlocal
set Typ=*.jpg
for /f "delims=-" %%i in ('dir /b %Typ%') do call :Process "%%i"  
goto :eof
:Process
if not exist "%1" md "%1"  
move "%1%Typ%" "%1"  

Grüße
bastla

P.S.: Ich hatte auch an einem VB-Script gebastelt (falls die Namens-Systematik etwas komplizierter geworden wäre), das etwa Deinem Ablauf entsprochen hätte (also zuerst die Ordner, dann das Verschieben), daher meine "Verspätung" ...

[Edit]So weit da oben im Thread wollte ich das eigentlich nicht reinquetschen ... [/Edit]
Mitglied: FocKo
FocKo 07.01.2007 um 19:48:18 Uhr
Goto Top
So, hab das jetzt mal ausprobiert...
...leider ohne Erfolg.

Ich hab sowohl den "Bildordner" als auch den "Zielordner" angegeben. Habe dann die Batchdatei ausgeführt und gehofft das sich was rührt...aber leider nix.

Ich habe auch noch ein weiteres Problem entdeckt.
Da ich noch ein paar Musiktitel sortieren muss dachte ich mir frage ich euch, da ihr euch etwas besser als ich auskennt.
Das Schema ist das gleiche:
Die Musiktitel sind so sortiert, dass als erstes der Interpret kommt dann ein Bindestrich und dann der Musiktitelname (Beispiel: Seeed - Papa Noah.mp3)

Könnte man für dieses Beispiel auch eine Batchdatei verfassen, die für jeden vorhandenen Interpreten einen eigenen Ordner erstellt und die vorhandenen Musiktitel automatisch in die von der Batchdatei erstellten Ordner verschiebt?

D.i.V.
MfG FocKo
Mitglied: miniversum
miniversum 07.01.2007 um 19:58:21 Uhr
Goto Top
Hast du alle Drei getestet und alle drei gehennicht?

Mit musik sollte es genau so gehen. Nur eben an den entsprechenden Stellen das jpg gegen ein mp3 austauschen.

miniversum
Mitglied: Biber
Biber 07.01.2007 um 19:58:47 Uhr
Goto Top
@FocKo
Kann eigentlich nur an meiner Unterstellung liegen, dass die Bilder die Endung .jpg haben.
Aber nimm auch lieber bastla's Variante... meine ist nur so prosaisch geworden, weil es eine abgespeckte Variante der Anforderung 1 ist.

Zu Deiner Frage:
Erstens) Anforderungen "Musiktitel nach Interpret/Album und Titel trennen und bla" hatten wir schon. Probier mal die Forumssuche.
Zweitens) Wenn wir die Beispielskizzen so dürftig kommentiert/so kryptisch geschrieben haben, dass ein Transfer auf eine ähnliche Aufgabe nicht möglich ist, dann haben wir es versiebt. Entschuldige.
An welchen Stellen gibt es denn Verständnisprobleme?

Gruß
Biber
Mitglied: bastla
bastla 07.01.2007 um 20:31:55 Uhr
Goto Top
Hallo FocKo!

Sowohl miniversum's Lösung, als auch meine oben stehende Variante, setzen voraus, dass die Batch-Datei direkt im Bilder-Ordner liegt - von dort aus sollte es dann aber schon klappen (wenn Deine Bilder den Typ .jpg haben).

Für die Musikdateien kannst Du (nach Anpassung des Dateityps) die gleiche Batch-Lösung nehmen, da auch hier das Trennzeichen (steht nach "delims=") ein "-" ist.

Grüße
bastla
Mitglied: bastla
bastla 07.01.2007 um 20:41:17 Uhr
Goto Top
@miniversum

2 Kleinigkeiten (und beide ganz am Ende, beim Verschiebe-Ziel, für das auch die Ordnerangabe genügt hätte):
Das Anführungszeichen sollte vor dem ersten %%i stehen, um auch den Pfad gegen Leerstellen abzusichern (wie Du es vorne bereits gemacht hast), und auf einen Unix/Linux-Slash könnte ein MS-System etwas gereizt (oder zumindest mit Unverständnis) reagieren ... face-wink

Grüße
bastla
Mitglied: FocKo
FocKo 08.01.2007 um 16:31:50 Uhr
Goto Top
Danke für eure Hilfe,
habs zwar immer noch nicht wirklich auf die Reihe bekommen...(nein).

Wer mir trotzdem helfen will der kann mich, wenn er will im Xfire, MSN, ICQ adden:

ICQ: 302018935
MSN: floweiss1@gmx.de
Xfire: focko1991

Danke

MfG FocKo