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.
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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 204879
Url: https://administrator.de/contentid/204879
Ausgedruckt am: 22.11.2024 um 16:11 Uhr
11 Kommentare
Neuester Kommentar
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. wird dannDazu 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
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
...\Kamera\000\123\E000-123.jpg
...\Kamera\001\999\E001-999.jpg
...\Kamera\010\666\E010-666.jpg
Vorteil ist, dass man nachher noch weiß, wo das Bild her ist.
Markus
Jetzt hat es mich interessiert, wie ich sowas unter Linux machen kann:
Ausgeführt im Verzeichnis /Kamera/ kopiert es die umbenannten Bilder in genau dieses Verzeichnis.
Markus
#!/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
Markus
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 wenn das Skript skript.sh heißt. Dann kopierst Du das Skript ins /Kamera/ Verzeichnis und führst es dort aus 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
chmod +x skript.sh
./skript.sh
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
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
Markus
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!
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!
Hallo D3ld0C,
mit Batch sieht das so aus:
Gruss!
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!
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
Du musst überlegen, was sonst so Deine Aufgaben am Computer sind und womit Dir langfristig auch bei anderen Aufgaben geholfen ist.
Markus
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
Du musst überlegen, was sonst so Deine Aufgaben am Computer sind und womit Dir langfristig auch bei anderen Aufgaben geholfen ist.
Markus