d3ld0c
Goto Top

Mit Batch Bilder aus Unterverzeichnissen verschieben und umbenennen

Hallo Zusammen,

ich habe ein Batch Problem und mich hier schon umgesehen, aber immernoch keine Lösung gefunden.
Deswegen wollte ich jetzt mal in einem neuen Beitrag euch um Hilfe bitten.

Es geht um folgendes,

eine Überwachungskamera sichert bei uns alle paar Minuten ein Bild ab.
Das Problem dabei ist das jedes Bild den gleichen Namen hat, es wird nur in einem extra Ordner geschoben.
Das sieht dann ungefähr so aus:

...\Kamera\000\123\E00000.jpg
...\Kamera\001\999\E00000.jpg
...\Kamera\010\666\E00000.jpg
.
.
.

Die Bilder sollen jetzt in einen neuen Ordner "Bilder" verschoben werden.
Bisher kam ich soweit, dass die Bilder verschoben, aber durch den gleichen Namen überschrieben werden, mit dieser For-Schleife:

For /F "Tokens=*" %%i in ('Dir /B /S "\\PC842\Kamera\10_12_15_128\test\*.jpg"') do Move /Y "%%~fi" "\\PC842\Kamera\Bilder"

Ich hatte es auch schon versucht, einen Zähler einzubauen der die Bilder automatisch umbenennt und nummeriert.
Zum Beispiel:

...\Kamera\Bilder\1.jpg
...\Kamera\Bilder\2.jpg

Am Ende hat er alle Bilder in 1.jpg umbenannt und beim verschieben wieder überschrieben.
Gut wäre auch noch, wenn die leeren Ordner, nachdem die Bilder verschoben sind, gelöscht werden.

Mittlerweile fällt mir nichts mehr ein als Batch Neuling.

Hoffe ich hab das einigermaßen verstädnlich rüber gebracht und hoffe mir kann einer helfen.

Content-Key: 204879

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

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

Mitglied: 64748
64748 Apr 12, 2013 at 10:39:51 (UTC)
Goto Top
Hallo,

Wenn es nicht darauf ankommt, welches Bild welche Nummer bekommt bzw. wenn der Name egal ist, dann würde ich jedes Bild nach seinem Pfad benennen.
...\Kamera\000\123\E00000.jpg
...\Kamera\001\999\E00000.jpg
...\Kamera\010\666\E00000.jpg
wird dann
...\Kamera\000\123\E000-123.jpg
...\Kamera\001\999\E001-999.jpg
...\Kamera\010\666\E010-666.jpg
Dazu musst Du aus dem Pfad die beiden Verzeichnisse als Variablen extrahieren und dann das Bild umbenennen. Danach kannst Du alle Bilder ins gleiche Verzeichnis verschieben.

Vorteil ist, dass man nachher noch weiß, wo das Bild her ist.

Markus
Mitglied: 64748
64748 Apr 12, 2013 at 10:58:39 (UTC)
Goto Top
Jetzt hat es mich interessiert, wie ich sowas unter Linux machen kann:
#!/bin/sh
for i in `find . -name E00000.jpg -type f`
do f=$(echo $i | cut -d '/' -f 2)  
    g=$(echo $i | cut -d '/' -f 3)  
    cp $i E$f-$g.jpg
done
Ausgeführt im Verzeichnis /Kamera/ kopiert es die umbenannten Bilder in genau dieses Verzeichnis.

Markus
Member: D3ld0C
D3ld0C Apr 12, 2013 at 11:09:21 (UTC)
Goto Top
Hallo Markus,

schonmal Danke für deine schnelle Antwort.

Die Idee gefällt mir, nur weiß ich nicht auf Anhieb, wie ich das realisieren soll.
Kannst du mir vielleicht ein Beispiel zeigen, wie das geht?

Gruß
Daniel
Mitglied: 64748
64748 Apr 12, 2013 at 12:13:21 (UTC)
Goto Top
Entweder machst Du das mit einem Linuxrechner oder unter Windows mit cygwin. Den obigen Code schreibst kopierst Du in eine Textdatei. Unter Linux wird die ausführbar gemacht
chmod +x skript.sh
wenn das Skript skript.sh heißt. Dann kopierst Du das Skript ins /Kamera/ Verzeichnis und führst es dort aus
./skript.sh
Das war's schon. Du findest (es dauert einige Sekunden) die Dateien im /Kamera/ Verzeichnis.

Man braucht kein Skript, man kann auch (erste Zeile weglassen) das Skript in die Shell eingeben (wie gesagt unter Linux) und einfach die Zeilenenden durch Semikolon ersetzten. So hab ich das hier gemacht.

Ich hab mir eine Ordnerstruktur angelegt: Verzeichnisse 01/ bis 10/ mit Unterverzeichnissen 03/ bis 33/ und jeweils darin eine Datei E00000.jpg. Das Ergebnis sieht so aus:
markus@samsung:~/test/kamera$ ls
01/         E02-16.jpg  E04-08.jpg  E05-31.jpg  E07-23.jpg  E09-15.jpg
02/         E02-17.jpg  E04-09.jpg  E05-32.jpg  E07-24.jpg  E09-16.jpg
03/         E02-18.jpg  E04-10.jpg  E05-33.jpg  E07-25.jpg  E09-17.jpg
04/         E02-19.jpg  E04-11.jpg  E06-03.jpg  E07-26.jpg  E09-18.jpg
05/         E02-20.jpg  E04-12.jpg  E06-04.jpg  E07-27.jpg  E09-19.jpg
06/         E02-21.jpg  E04-13.jpg  E06-05.jpg  E07-28.jpg  E09-20.jpg
07/         E02-22.jpg  E04-14.jpg  E06-06.jpg  E07-29.jpg  E09-21.jpg
08/         E02-23.jpg  E04-15.jpg  E06-07.jpg  E07-30.jpg  E09-22.jpg
09/         E02-24.jpg  E04-16.jpg  E06-08.jpg  E07-31.jpg  E09-23.jpg
10/         E02-25.jpg  E04-17.jpg  E06-09.jpg  E07-32.jpg  E09-24.jpg
E01-03.jpg  E02-26.jpg  E04-18.jpg  E06-10.jpg  E07-33.jpg  E09-25.jpg
E01-04.jpg  E02-27.jpg  E04-19.jpg  E06-11.jpg  E08-03.jpg  E09-26.jpg
E01-05.jpg  E02-28.jpg  E04-20.jpg  E06-12.jpg  E08-04.jpg  E09-27.jpg
E01-06.jpg  E02-29.jpg  E04-21.jpg  E06-13.jpg  E08-05.jpg  E09-28.jpg
E01-07.jpg  E02-30.jpg  E04-22.jpg  E06-14.jpg  E08-06.jpg  E09-29.jpg
E01-08.jpg  E02-31.jpg  E04-23.jpg  E06-15.jpg  E08-07.jpg  E09-30.jpg
E01-09.jpg  E02-32.jpg  E04-24.jpg  E06-16.jpg  E08-08.jpg  E09-31.jpg
E01-10.jpg  E02-33.jpg  E04-25.jpg  E06-17.jpg  E08-09.jpg  E09-32.jpg
E01-11.jpg  E03-03.jpg  E04-26.jpg  E06-18.jpg  E08-10.jpg  E09-33.jpg
E01-12.jpg  E03-04.jpg  E04-27.jpg  E06-19.jpg  E08-11.jpg  E10-03.jpg
E01-13.jpg  E03-05.jpg  E04-28.jpg  E06-20.jpg  E08-12.jpg  E10-04.jpg
E01-14.jpg  E03-06.jpg  E04-29.jpg  E06-21.jpg  E08-13.jpg  E10-05.jpg
E01-15.jpg  E03-07.jpg  E04-30.jpg  E06-22.jpg  E08-14.jpg  E10-06.jpg
E01-16.jpg  E03-08.jpg  E04-31.jpg  E06-23.jpg  E08-15.jpg  E10-07.jpg
E01-17.jpg  E03-09.jpg  E04-32.jpg  E06-24.jpg  E08-16.jpg  E10-08.jpg
E01-18.jpg  E03-10.jpg  E04-33.jpg  E06-25.jpg  E08-17.jpg  E10-09.jpg
E01-19.jpg  E03-11.jpg  E05-03.jpg  E06-26.jpg  E08-18.jpg  E10-10.jpg
E01-20.jpg  E03-12.jpg  E05-04.jpg  E06-27.jpg  E08-19.jpg  E10-11.jpg
E01-21.jpg  E03-13.jpg  E05-05.jpg  E06-28.jpg  E08-20.jpg  E10-12.jpg
E01-22.jpg  E03-14.jpg  E05-06.jpg  E06-29.jpg  E08-21.jpg  E10-13.jpg
E01-23.jpg  E03-15.jpg  E05-07.jpg  E06-30.jpg  E08-22.jpg  E10-14.jpg
E01-24.jpg  E03-16.jpg  E05-08.jpg  E06-31.jpg  E08-23.jpg  E10-15.jpg
E01-25.jpg  E03-17.jpg  E05-09.jpg  E06-32.jpg  E08-24.jpg  E10-16.jpg
E01-26.jpg  E03-18.jpg  E05-10.jpg  E06-33.jpg  E08-25.jpg  E10-17.jpg
E01-27.jpg  E03-19.jpg  E05-11.jpg  E07-03.jpg  E08-26.jpg  E10-18.jpg
E01-28.jpg  E03-20.jpg  E05-12.jpg  E07-04.jpg  E08-27.jpg  E10-19.jpg
E01-29.jpg  E03-21.jpg  E05-13.jpg  E07-05.jpg  E08-28.jpg  E10-20.jpg
E01-30.jpg  E03-22.jpg  E05-14.jpg  E07-06.jpg  E08-29.jpg  E10-21.jpg
E01-31.jpg  E03-23.jpg  E05-15.jpg  E07-07.jpg  E08-30.jpg  E10-22.jpg
E01-32.jpg  E03-24.jpg  E05-16.jpg  E07-08.jpg  E08-31.jpg  E10-23.jpg
E01-33.jpg  E03-25.jpg  E05-17.jpg  E07-09.jpg  E08-32.jpg  E10-24.jpg
E02-03.jpg  E03-26.jpg  E05-18.jpg  E07-10.jpg  E08-33.jpg  E10-25.jpg
E02-04.jpg  E03-27.jpg  E05-19.jpg  E07-11.jpg  E09-03.jpg  E10-26.jpg
E02-05.jpg  E03-28.jpg  E05-20.jpg  E07-12.jpg  E09-04.jpg  E10-27.jpg
E02-06.jpg  E03-29.jpg  E05-21.jpg  E07-13.jpg  E09-05.jpg  E10-28.jpg
E02-07.jpg  E03-30.jpg  E05-22.jpg  E07-14.jpg  E09-06.jpg  E10-29.jpg
E02-08.jpg  E03-31.jpg  E05-23.jpg  E07-15.jpg  E09-07.jpg  E10-30.jpg
E02-09.jpg  E03-32.jpg  E05-24.jpg  E07-16.jpg  E09-08.jpg  E10-31.jpg
E02-10.jpg  E03-33.jpg  E05-25.jpg  E07-17.jpg  E09-09.jpg  E10-32.jpg
E02-11.jpg  E04-03.jpg  E05-26.jpg  E07-18.jpg  E09-10.jpg  E10-33.jpg
E02-12.jpg  E04-04.jpg  E05-27.jpg  E07-19.jpg  E09-11.jpg  skript.sh*
E02-13.jpg  E04-05.jpg  E05-28.jpg  E07-20.jpg  E09-12.jpg  
E02-14.jpg  E04-06.jpg  E05-29.jpg  E07-21.jpg  E09-13.jpg
E02-15.jpg  E04-07.jpg  E05-30.jpg  E07-22.jpg  E09-14.jpg

Markus
Member: D3ld0C
D3ld0C Apr 12, 2013 at 13:58:17 (UTC)
Goto Top
Wir haben nur Windows, deswegen probier ich das mal mit cygwin und sehe was bei raus kommt.

Schonmal Danke
Mitglied: 64748
64748 Apr 12, 2013 at 14:12:31 (UTC)
Goto Top
Wenn es bei Euch möglich ist, dann reicht auch eine Linux-Live-CD/DVD und die Daten vorher auf einen USB-Stick übertragen.

Markus
Member: D3ld0C
D3ld0C Apr 12, 2013 at 14:25:29 (UTC)
Goto Top
Naja, die Kamera macht ja immer wieder Bilder und so müsste ich das immer wieder machen.
Ich hatte eigentlich geplant eine Batch zu schreiben und die jeden Tag einmal durchlaufen zu lassen.

Das Problem ist das man erst in die Ordner reingehen muss jedes einzelne Bild zu sehen.
Deswegen ist es mein Ziel sie alle in einen Ordner zu tun um einen besseren Überblick zu haben.
Member: VooDoo4711
VooDoo4711 Apr 12, 2013 updated at 14:32:43 (UTC)
Goto Top
Hallo,

Du kannst es auch mal mit MobaXterm (http://mobaxterm.mobatek.net/) probieren.
Das bringt grundlegende Linux-Befehle mit und Du kannst damit unter Windows auf Deine Dateien zugreifen und sie verarbeiten.

Viel Erfolg!
Member: Endoro
Endoro Apr 12, 2013 at 14:39:12 (UTC)
Goto Top
Hallo D3ld0C,

mit Batch sieht das so aus:
@echo off&setlocal 
set "startfolder=."  
set "zielfolder=c:\temp"  

for /r "%startfolder%" %%i in (E0000?.jpg) do (  
	for %%j in ("%%~dpi.") do if not exist "%zielfolder%\%%~nj%%~xi" (  
		move "%%~fi" "%zielfolder%\%%~nj%%~xi"  
		) else echo("%zielfolder%\%%~nj%%~xi" already exists!  
)


Gruss!
Mitglied: 64748
64748 Apr 12, 2013 at 14:46:41 (UTC)
Goto Top
Meine Meinung: Wenn man viel mit Textdateien arbeitet oder solche Dateioperationen machen muss wie Du jetzt, dann ist es sehr hilfreich, wenn man irgendwo einen Linuxrechner stehen hat, sei es auch ein Rechner mit Dualboot Linux/Windows, oder ein Windows-PC mit einem virtuellen Linuxrechner (oder umgekehrt, (würde ich vorziehen).

Man hat bei Unix/Linux-Systemen viele sehr leistungsfähige Werkzeuge zu Text- und Dateibearbeitung dabei. Es ist ein sehr effizientes Arbeiten.
Damit ist nichts gegen Windows gesagt, man muss wissen, dass bei Unix traditionell die Konfiguration und Steuerung des Systems über menschenlesbare Textdateien abläuft, so haben sich auch die notwendigen Administrationswerkzeuge entwickelt.

Man kann das alles natürlich auch mit einem Batchskript machen. Allerdings macht man für gewöhnlich mit Batch Stapelverarbeitung (wie der Name schon sagt). Aber es gibt auch für Windows Werkzeuge, die über die Möglichkeiten von Batch hinaus gehen und vor allem etwas übersichtlicher und komfortabler sind. VBS ist nicht so mein Fall, aber z.B. die gängigen Skriptsprachen wie Perl, Python oder Ruby laufen auch unter Windows. Ich kann z.B. Strawberry Perl empfehlen. Wenn ich jedoch Batchskripten sehe (hier im Forum), die z.T. mehrere hundert Zeilen lang sind, dann kringeln sich mir die Fußnägel nach oben face-wink

Du musst überlegen, was sonst so Deine Aufgaben am Computer sind und womit Dir langfristig auch bei anderen Aufgaben geholfen ist.

Markus
Member: D3ld0C
D3ld0C May 15, 2013 at 06:05:43 (UTC)
Goto Top
So ich hatte mich jetzt mal ein bisschen damit beschäftigt und versucht es in Linux mit cygwin, oder mobaxterm umzusetzen.
Letzendlich habe ich aber eine Lösung mit einer Batch-Datei gefunden, dank dem Code von Endoro.
Danke dafür face-smile

Das heißt nicht das ich das unbedingt besser finde, aber der Aufwand ist kleiner.
Danke an euch allen für eure Hilfe.

Gruß
Daniel