#404355 otti1a
26.10.2016, 18:05:59
|
Batchfile Ordner nach Dateinamen erzeugen (pc.coding) |
Hallo Leute,
seit 3 vollen Tagen suche ich im Netz nach einer Lösung und bin nicht wirklich fündig geworden, darum bitte ich um eure Hilfe, da ich noch dazu im Programmieren eine völlige Niete bin. Das Problem: in einem Ordner D:Botanik habe ich ca. 5500 Pflanzenfotos, nach (über 100) Familien sortiert, z.B. D:BotanikKorbblütlerxy.jpg Der Aufbau der Dateinamen geht so:
wissenschaftlicher Name - deutscher Name (Land Ort)_01
Natürlich gibt es für viele Pflanzen mehrere Bilder und was ich brauche, ist ein Code (möglichst .bat oder .vbs) der 1. innerhalb des Familien-Ordners neue Folder erzeugt, benannt nach den Pflanzennamen bis zur Klammer und 2. die Files in den jeweils passenden Ordner verschiebt.
Habe schon einige Batches und ein vbs -Script (Beisp. siehe unten) probiert, wobei das Problem bei mir ist, dass ich auch zu wenig Kenntnisse habe, um die Scripts richtig anzupassen! Auch mit einigen Progs (TC,Dropit, watch Directory, file2folder, advanced renamer und noch andere ...) bin ich nicht weitergekommen. Das Ergebnis war entweder ein Folder für jedes file - bzw. eine Fehlermeldung oder überhaupt keine Aktion bei den Scripts. Ich brauche aber nur so viele Folder, wie Dateien mit gleichlautendem Namen bis zur Klammer im Familien-Ordner sind.
Beispiel für ein Skript:
for /f "delims=_ tokens=1-3 " %i in ('dir /a-D /b d:einDBADirDBA_3_*') do @if not exist "d:einDBADir%i_%j_%k" md "d:einDBADir%j_%j%k"
for /f "delims=_ tokens=1-3 " %i in ('dir /aD /b d:einDBADirDBA_3_*') do move "d:einDBADir%i_%j_%k*.tif" "d:einDBADir%j_%j%k"
oder:
@echo off
cls
set SRC=c:quelle
set DEST=c:ziel
for /f "tokens=4" %%i in ('dir %SRC% ^| find "_"') do (
for /f "tokens=1-3 delims=_" %%j in ("%%i") do (
md %DEST%%%j_%%k_%%l 2>nul
echo copy %SRC%%%i %DEST%%%j_%%k_%%l%%i
copy %SRC%%%i %DEST%%%j_%%k_%%l%%i >nul
if %errorlevel% EQU 0 (
echo Datei %%i erfolgreich nach %%j%%k%%l kopiert
) else (
echo FEHLER beim Verarbeiten der Datei %%i
)
)
)
|
#404357 rstilz
26.10.2016, 19:43:47
@ otti1a
|
ohne Vollautomatik ... |
... gehts ev einfacher 
Also ich würde das nicht komplett per Skript lösen (was sicher auch elegant geht, aber "richtiges" Programmieren erfordert). Wichtig ist ja dass man mit den Mitteln und Methoden die man (einigermassen) beherrscht auch zum Ergebniss kommt.
Also(wir brauchen "DOS", Tabellenkalkulation, "guten" Editor wg der tabs):
1. Erzeuge eine Liste der Dateinamen (zB DOS: dir *.* >fnamlist.txt)
2. Importiere die Liste in LibreOffice.Calc(exel, oder whatever) mit dem "(" als Trennzeichen
Damit hast du eine Liste der Ordnernamen in einer Spalte getrennt vom "Rest"
3. Kopiere diese Liste (als Wert!) auf ein extra Blatt und sortiere nach Namen. Damit stehen alle Mehrfachnennungen nun schön beisammen (untereinander).
4. Um die Doppel auszusortieren einfach als Formel in die Nachbarzellen zu zB Spalte A(also die Ordnernamen)
if(A2<>A1;A1;"")
Damit hat die Nachbarspalte nur noch eindeutige Namen und Leerzeilen.
1. und letzte Zeile der neuen Liste später ggf "manuell" ausfüllen.
5. Diese Liste (als Wert!) erneut in eine extra Spalte kopieren und wieder sortieren(->Leerzeilen weg)
6. Jetzt kannst du den für ein DOS-Kommando fehlenden Text in einer weiteren Spalte ergänzen
zB "md " "<hier spaltemitordnername>"
7. Den gewünschten Inhalt per Cut'n Paste in einen Editor ausspucken (zB Notepad++ portable).
Dort die aus der Tabellenkalkulation eingefügten tabs ersetzen(t nach " ")
8. Die Datei als bat-file speichern und ausführen
9. ff-Schritte: Das Prinzip sollte jetzt klar sein 
HTH
P.S. Bei 5000 Zeilen kann der Import der Ordnerliste kurz dauern.
|
#404359 otti1a
26.10.2016, 20:37:39
@ rstilz
|
ohne Vollautomatik ... |
Danke, rstilz
Eine komplette List der Arten ohne Duplikate habe ich schon längst, und ich hab auch ein Batch, das die Ordner dazu erzeugt. Ich nehme an, das würde dein Vorschlag auch machen. Es geht ja um das mühsame Einsortieren der Dateien in die jeweiligen Ordner und das kann dieser Batch wahrscheinlich nicht, oder?
Grüße, Otti
|
#404360 rstilz
26.10.2016, 21:04:54
@ otti1a
|
Mhhhh... |
Hallo Otti
> Eine komplette List der Arten ohne Duplikate habe ich schon längst, und ich
> hab auch ein Batch, das die Ordner dazu erzeugt.
Gut
> Ich nehme an, das würde dein Vorschlag auch machen. Es geht ja um das mühsame Einsortieren der
> Dateien in die jeweiligen Ordner und das kann dieser Batch wahrscheinlich nicht, oder?
Mhhhh... Eigentlich wollte ich dir "keinen Fisch geben sondern zeigen wie man angelt "
Also, nehme doch die große Liste mit den Dateinamen und ergänze (in exel o.ä.) in der Nachbarspalte die nötigen DOS-Kommandos und Ordnernamennamen (nach "Rezept 1"). Dazu werden ja nur die "bearbeiteten" Zellinhalte wieder "neben" die Ausgangsspalte kopiert.
Das Prinzip ist doch einfach aus deiner ursprünglichen Liste durch Einträge in Nachbarspalten (zwar manuell, aber doch sehr schnell machbar mit exel o.ä.) eine Textzeile "zusammenzustückeln" die das nötige Kommando für diese eine Datei enthält.
Wenn man das erledigt hat macht man aus diesen Inhalt nur noch eine bat-Datei mit 5000 Zeilen die das dann im DOS-Fenster ausführt.
HTH
reiner
|
#404363 otti1a
26.10.2016, 21:16:41
@ rstilz
|
Mhhhh... |
Eigentlich wollte ich nicht angeln lernen, oder würdest du vielleicht lernen wollen, ein paar Tausend Pflanzen zu erkennen? Ich arbeite z. B. in einem botanischen Forum mit und identifiziere Pflanzen für Leute, die mir ein Foto schicken, soweit es anhand des Bildes möglich ist. Wir haben also jeder unsere Spezialkenntnisse, aber auf verschiedenen Gebieten. In Excel zum Beispiel kenne ich mich wohl ganz gut aus, und auch ein bisschen in Access. Da möchte ich auch immer was dazu lernen, aber script code wird immer Chinesisch für mich bleiben... Bin gerade dabei, eine Pflanzen-Datenbank zu erstellen, das ist Arbeit genug. Dachte nur, es gäbe jemanden, der es mir ein bisschen erleichtert.
Danke jedenfalls!
|
#404364 Manfred H
26.10.2016, 21:20:25 (editiert von Manfred H, 26.10.2016, 21:27:02)
@ otti1a
|
ohne Vollautomatik ... (ed) |
Schreibe doch mal 2-3 Namensgruppen und die dazugehörigen Zielordner hier rein.
BotanikKorbblütler1.jpg
BotanikKorbblütlerx.jpg
BotanikKorbblütleradada.jpg
BotanikKorbblütlerZZZ.jpg
kannst Du alle mit BotanikKorbblü*.jpg kopieren
edit:
Du kannst auch zwei win-explorer Fenster nebeneinander gruppieren.
WIN-Taste und Pfeil links oder rechts
Dann im Quellfenster nach Dateiname sortiern und die ganzr Dateinamen-Gruppe markieren. Dann der Dragndrop ins ander Fenster ins Zielverzeichnis ziehen.
"Vielleicht bist ja Du in eine Stunde fertig".
ed die zweite
Verflixt mein linux netbook hat Tastaturhänger.
|
#404369 Karsten Meyer 
Konstanz am Bodensee, 26.10.2016, 21:45:26
@ otti1a
|
Mhhhh... |
> Eigentlich wollte ich nicht angeln lernen...
Lies dir doch seine Lösung nochmal in Ruhe durch. Ich finde sie bestechend einfach, und sie hat rein gar nichts mit Programmieren zu tun. Das Tabellenprogramm erledigt die anspruchsvolle Sache dabei, nämlich die Abtrennung der Ordnernamen.
--
Ich bin sehr aktiv bei facebook, wo ich vor allem Fotos zeige und mich in Gruppen über alles mögliche, insbesondere meine Heimatstadt Konstanz austausche.
|
#404370 otti1a
26.10.2016, 22:01:57
@ Karsten Meyer
|
Mhhhh... |
Was ich noch korrigieren wollte, ist Folgendes: in meiner ersten Anfrage habe ich ein paar Pfade hineingeschrieben
D:BotanikKorbblütlerTaraxacum sect. Ruderalia - Gewöhnlicher Löwenzahn (A Michelhausen)_01
und der Editor hat die Backslashs gekillt. Hoffentlich haut es jetzt hin!
Es handelt sich um über hundert Familien-Ordner mit je 2-100 Arten, für die ich jeweils einen Unterordner brauche. Na, dann muss ich es eben händisch machen!
|
#404371 otti1a
26.10.2016, 22:05:02
@ otti1a
|
Mhhhh... |
Wieder sind die blöden backslashs weg! Ich versuche es so:
D:(backslash)Botanik(backslash)Korbblütler(backslash)BotanikKorbblütlerTaraxacum sect. Ruderalia - Gewöhnlicher
> Löwenzahn (A Michelhausen)_01
|
#404372 otti1a
26.10.2016, 22:07:47
@ otti1a
|
Mhhhh... |
Neuer Versuch:
Wieder sind die blöden backslashs weg! Ich versuche es so:
D:(backslash)Botanik(backslash)Korbblütler(backslash)Taraxacum sect. Ruderalia - Gewöhnlicher Löwenzahn (A Michelhausen)_01
Schaut zwar nicht gut aus, aber anders bring ich es nicht zusammen
Gruß, Otti
|
#404374 rstilz
26.10.2016, 22:48:05
@ otti1a
|
Mhhhh... |
> Ich arbeite z. B. in
> einem botanischen Forum mit und identifiziere Pflanzen für Leute, die mir
> ein Foto schicken, soweit es anhand des Bildes möglich ist.
oK, überzeugt 
Wenn es nicht eilt "sortier" ich's mal. Lad die Datei einfach auf workupload.com hoch (Speicherdauer 14 Tage)
und poste den Link darauf.
mein batch:
"wissenschaftlicher Name - deutscher Name (Land Ort)_01"
würde dann kopiert in den Subordner "wissenschaftlicher Name - deutscher Name"
mit dem Namen (wie vorher) "wissenschaftlicher Name - deutscher Name (Land Ort)_01"
Wenn möglich hier bitte dann ein Beispiel wie das DOS-Kommando für *eine* Datei aussehen soll.
> Dachte nur, es gäbe jemanden, der es mir ein bisschen erleichtert.
Versuchen doch alle hier im Forum. Jeder auf seine Art und Schritt für Schritt.
|
#404381 bender
Strasshof an der Nordbahn, 27.10.2016, 10:45:38
@ otti1a
|
OT |
Vielleicht schaffen es die Admins dieses Forums doch mal, diesen Bug zu beheben. Ich kann diese never-touch-a-running-system-Mentalität ja irgendwo nachvollziehen, nur das nervt dann doch ein wenig. Davon mal ab wäre eine smartphonetaugliche Version auch mal ganz nett.
--
Grüße aus Strasshof an der Nordbahn (ja, da wo die Natascha im Keller lebte)
bender
sudo apt-get install brain_2.0
|
#404382 fuchsi 
Niederösterreich, 27.10.2016, 10:54:20 (editiert von fuchsi, 27.10.2016, 10:54:44)
@ bender
|
OT - TEST backslash (ed) |
> Vielleicht schaffen es die Admins dieses Forums doch mal, diesen Bug zu
> beheben. Ich kann diese never-touch-a-running-system-Mentalität ja irgendwo
> nachvollziehen, nur das nervt dann doch ein wenig. Davon mal ab wäre eine
> smartphonetaugliche Version auch mal ganz nett.
auch in Code eingebettet löscht er beim Editieren die Backslash
d:testtesttest
--
mein privates Hobby. www.ffzell.at
|
#404442 baeuchlein
28.10.2016, 15:13:31
@ otti1a
|
OT: Backslash-Ersatz |
> Wieder sind die blöden backslashs weg! Ich versuche es so:
> D:(backslash)Botanik(backslash)Korbblütler(backslash)Taraxacum sect.
> Ruderalia - Gewöhnlicher Löwenzahn (A Michelhausen)_01
>
> Schaut zwar nicht gut aus, aber anders bring ich es nicht zusammen
Tippe statt des mit ALT-Gr und ß erreichbaren Backslashes ein "/" (Umschalt-/SHIFT-Taste und Taste "7" über dem Buchstabenfeld). Das sieht besser aus und wird von den meisten hier im Forum inzwischen notgedrungen verstanden.
|