Batch Dateien nach Namen und in erstellte Unterordner verschieben

sbr17

Newbie
Registriert
Jan. 2018
Beiträge
4
Hallo zusammen,

ich habe schon in einigen Foren gelesen aber komme nicht auf die finale Lösung zu meinem Vorhaben, Bilder aus meiner Überwachungskamera in entsprechende Unterordner zu verschieben.

Die Kamera erstellt folgende Dateien:

20D1DC004AE3(IP Kamera)_1_20180122222611_274.jpg
20D1DC004AE3(IP Kamera)_1_20180122222613_275.jpg
usw.
D.h. aufgenommen am 22.01.2018 um 22:26 und 11 bzw. 13 Sekunden kombiniert mit fortlaufender Nummer.

Nun möchte ich über eine geplante Aufgabe daily einen Job starten der dieses Verzeichnis aufruft und anhand des Dateinamens die Bilder in diesem Fall in den Ordner "2018_01_22 verschiebt", analog natürlich immer entsprechend dem Aufnahmedatum.

Bin um jeden Tipp dankbar!

LG
 
Kurze Gegenfrage, hast du geprüft, ob deine Kamera nicht die Bilder sinnvoll in Unterordner anlegen kann?
 
guter gedanke, daran hatte ich schon gedacht, aber leider gibt es keine weiteren parameter als den absoluten pfad anzugeben.
 
Also das moven geht relativ einfach mit:
move .\*20180122*.jpg .\2018-01-22

wies von hier weiter geht muss ich selbst googlen :D
 
Code:
@echo off

REM Datum auslesen, Tag, Monat und Jahr in einzelne Variablen packen


for /F "skip=1 delims=" %%F in ('
    wmic PATH Win32_LocalTime GET Day^,Month^,Year /FORMAT:TABLE
') do (
    for /F "tokens=1-3" %%L in ("%%F") do (
        set Tag=0%%L
        set Monat=0%%M
        set Jahr=%%N
    )
)
set Tag=%Tag:~-2%
set Monat=%Monat:~-2%


REM Neuen Ordner im Format Jahr_Monat_Tag anlegen


mkdir C:\Bilder\%Jahr%_%Monat%_%Tag%


REM Aus dem Quellordner, alle Dateien deren Namen das aktuelle Datum im Format JahrMonatTag enthalten, in den neu erstellten Zielordner verschieben


move C:\quelle\*%Jahr%%Monat%%Tag%*.* C:\Bilder\%Jahr%_%Monat%_%Tag%\

​Sollte funktionieren. :) Bei der Quelle im move Befehle kann man am Ende auch statt .* das .jpg verwenden (oder welches Bildformat auch immer) um auszuschließen, dass eventuell vorhandene andere Dateien und Ordner die zufällig die Zahlenfolge im Namen tragen, auszuschließen.
 
Zuletzt bearbeitet:
Einfach ne *.ps1 ins Verzeichnis legen,
Code:
dir -File -Filter "*.jpg" | ? {
	$_.BaseName -match "^([\da-z]+\(IP Kamera\)_\d_(?<year>\d{4})(?<month>\d{2})(?<day>\d{2})\d{6}_\d+)"
} | % {
	[void](New-Item -ItemType Directory -Force ("{0}-{1}-{2}" -f $Matches.year,$Matches.month,$Matches.day))
	Move-Item $_.FullName (Join-Path ("{0}-{1}-{2}" -f $Matches.year,$Matches.month,$Matches.day) $_.Name)
}
rein kopieren und ausführen.
 
gleich 2 lösungensansätze, vielen dank, werde beide testen :)
 
Der Lösungsansatz von Killerpixel macht nicht ganz das, was Du willst. Er holt sich das Datum nicht aus dem Dateinamen sondern aus dem Systemdatum und verschiebt nur die Dateien, die das gleiche Datum haben. Wenn also Bilddateien vom Vortag da sind, dann werden die ignoriert ... auch könnte es Fehler geben, wenn der Datumsstring mit anderen Teilen des Dateinamens übereinstimmt.

Code:
@echo off
setlocal enabledelayedexpansion
set source=Pfad zu den Bildateien auf der Kamera
set target=uebergeordneter Pfad fuer die verschobenen Bilder

:: Schleife ueber Bilddateien, Bilddateiname wird nach "_" zerlegt, dritter Teil wird geparst 
for /F "delims=_ token=3" %%a in ('dir /b %source%\*.jpg') do (
  :: Zeichen 0-3 = Jahr, 4-5 = Monat, 6-7 = Tag
  set Jahr=%a:~0,4%
  set Monat=%a:~4,2%
  set Tag=%a:~6,2%

  :: Zielverzeichnis anlegen, wenn es noch nicht existiert
  IF NOT EXIST "%target%\!Jahr!_!Monat!_!Tag!" (
    mkdir "%target%\!Jahr!_!Monat!_!Tag!"
  )

  :: alle Dateien mit dem geparsten Datum verschieben
  move "%source%\*_!Jahr!!Monat!!Tag!%*.jpg" "%target%\!Jahr!_!Monat!_!Tag!\"
)
 
Zuletzt bearbeitet: (Prüfung ob Zielordner bereits vorhanden ergänzt)
vielen dank für eure hilfe
das powershell script von yuuri läuft einwandfrei,
ich werde dann noch mit dem batch script testen :)

danke nochmals!
 
Zurück
Oben