Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Mit Batch Bilder aus Unterverzeichnissen verschieben und umbenennen

Frage Entwicklung Batch & Shell

Mitglied: D3ld0C

D3ld0C (Level 1) - Jetzt verbinden

12.04.2013 um 10:32 Uhr, 2755 Aufrufe, 11 Kommentare

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.
Mitglied: hmarkus
12.04.2013 um 12:39 Uhr
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
Bitte warten ..
Mitglied: hmarkus
12.04.2013 um 12:58 Uhr
Jetzt hat es mich interessiert, wie ich sowas unter Linux machen kann:
01.
#!/bin/sh 
02.
for i in `find . -name E00000.jpg -type f` 
03.
do f=$(echo $i | cut -d '/' -f 2) 
04.
    g=$(echo $i | cut -d '/' -f 3) 
05.
    cp $i E$f-$g.jpg 
06.
done
Ausgeführt im Verzeichnis /Kamera/ kopiert es die umbenannten Bilder in genau dieses Verzeichnis.

Markus
Bitte warten ..
Mitglied: D3ld0C
12.04.2013 um 13:09 Uhr
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
Bitte warten ..
Mitglied: hmarkus
12.04.2013 um 14:13 Uhr
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
Bitte warten ..
Mitglied: D3ld0C
12.04.2013 um 15:58 Uhr
Wir haben nur Windows, deswegen probier ich das mal mit cygwin und sehe was bei raus kommt.

Schonmal Danke
Bitte warten ..
Mitglied: hmarkus
12.04.2013 um 16:12 Uhr
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
Bitte warten ..
Mitglied: D3ld0C
12.04.2013 um 16:25 Uhr
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.
Bitte warten ..
Mitglied: VooDoo4711
12.04.2013, aktualisiert um 16:32 Uhr
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!
Bitte warten ..
Mitglied: Endoro
12.04.2013 um 16:39 Uhr
Hallo D3ld0C,

mit Batch sieht das so aus:
01.
@echo off&setlocal  
02.
set "startfolder=." 
03.
set "zielfolder=c:\temp" 
04.
 
05.
for /r "%startfolder%" %%i in (E0000?.jpg) do ( 
06.
	for %%j in ("%%~dpi.") do if not exist "%zielfolder%\%%~nj%%~xi" ( 
07.
		move "%%~fi" "%zielfolder%\%%~nj%%~xi" 
08.
		) else echo("%zielfolder%\%%~nj%%~xi" already exists! 
09.
)

Gruss!
Bitte warten ..
Mitglied: hmarkus
12.04.2013 um 16:46 Uhr
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
Bitte warten ..
Mitglied: D3ld0C
15.05.2013 um 08:05 Uhr
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

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
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (9)

Frage von JayyyH zum Thema Switche und Hubs ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...