loki.81
Goto Top

Batch Abfrage über Änderungsdatum

Hallo,

meine Überwachungskamera schreibt über den Tag hinweg sehr viele Video Files.
Mich interessieren aber vorwiegend nur Videos, die in den Nachtstunden erstellt werden.
Diese würde ich gerne über eine Batch Datei in einen separaten Ordner kopieren.

Ausschlaggebend wäre hier das Änderungsdatum der Datei, genauer die Änderungszeit. (Die Erstellzeit ist leider immer 02:00 Uhr)
Wenn diese zwischen 22:00 und 06:00 Uhr liegt, soll das Video kopiert werden.

Wie setze ich das am besten um.
Habe hierzu bisher nichts hilfreiches gefunden.

Besten Dank vorab.

Viele Grüße
Loki

Content-Key: 616926

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

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

Member: rubberman
Solution rubberman Oct 28, 2020 at 20:03:42 (UTC)
Goto Top
@echo off &setlocal
for %%i in ("C:\irgendwo\*.mov") do for /f "tokens=2" %%j in ("%%~ti") do (  
  call :is_in_time_range "22:00" "06:00" "%%j"  
  if not errorlevel 1 ECHO copy "%%i" "C:\separater Ordner\"  
)
PAUSE
exit /b

:: expected format of the 3 arguments: " h|hh[:mm[:ss[,cc|.cc]]]"  
:: minutes, seconds, or centi seconds which are not specified are treated as zero
:is_in_time_range    "begin (including)"    "end (excluding)"    "time to be evaluated"  
setlocal EnableDelayedExpansion
for /f "tokens=1-4 delims=:., " %%i in ("%~1") do (set h=00%%i&set m=00%%j&set s=00%%k&set c=00%%l&set b=#!h:~-2!!m:~-2!!s:~-2!!c:~-2!)  
for /f "tokens=1-4 delims=:., " %%i in ("%~2") do (set h=00%%i&set m=00%%j&set s=00%%k&set c=00%%l&set e=#!h:~-2!!m:~-2!!s:~-2!!c:~-2!)  
for /f "tokens=1-4 delims=:., " %%i in ("%~3") do (set h=00%%i&set m=00%%j&set s=00%%k&set c=00%%l&set t=#!h:~-2!!m:~-2!!s:~-2!!c:~-2!)  
if !b! lss !e! (set r=1&if !t! geq !b! if !t! lss !e! set r=0) else (set r=0&if !t! geq !e! if !t! lss !b! set r=1)
endlocal&exit /b %r%

Quell- und Zielordner sowie Dateiendung anpassen. Wenn die richtigen Dateien ausgegeben werden, entferne ECHO und PAUSE um das Ding scharf zu schalten.

Steffen
Member: Loki.81
Loki.81 Oct 29, 2020 at 18:03:24 (UTC)
Goto Top
Perfekt, dank dir!
Macht genau das, was es soll...

EIne Kleinigkeit noch - hast du einen Tip, wie man das Script dazu bringt, auch die Unterordner der Quelle zu durchsuchen?
Die Kamera legt folgende Ordnerstruktur an:

\Kamera\Monat\Tag\
Member: rubberman
rubberman Oct 29, 2020 at 18:06:31 (UTC)
Goto Top
Kein Problem, aber bevor ich antworte, soll diese Ordnerstruktur dann auch im Ziel wieder aufgebaut werden, oder ist das egal?

Steffen
Member: Loki.81
Loki.81 Oct 29, 2020 at 18:18:18 (UTC)
Goto Top
Nein, die Ordnerstruktur im Ziel ist egal.
Da reicht es wenn alle Dateien in einem Verzeichnis liegen...
Member: rubberman
rubberman Oct 29, 2020 at 19:08:32 (UTC)
Goto Top
Ja dann ... Zeile 2:
for /r "C:\irgendwo" %%i in ("*.mov") do for /f "tokens=2" %%j in ("%%~ti") do (  
Steffen
Member: Loki.81
Loki.81 Oct 29, 2020 at 20:00:12 (UTC)
Goto Top
Kann es sein, dass da mit der Zeitberechnung noch etwas nicht stimmt?
Läuft das Script noch auf Sommerzeit? face-wink

Lege ich call :is_in_time_range "00:00" "05:00" "%%j" fest, erhalte ich Datein mit einem Änderungsdatum zwischen 01:00 und 05:59

Ist jetzt nicht dramatisch. Kann ich einfach anpassen, in dem ich den Wert eine Stunde vorstelle... dann bekomme ich alles bis 04:59.
Nur der vollständigkeit halber, falls noch jemand das Script verwenden möchte...
Member: rubberman
rubberman Oct 29, 2020 updated at 21:02:13 (UTC)
Goto Top
Oh jetzt stellst du ne gute Frage. Vergleiche mal ein
echo "%%~i" %%~j&pause  
zwischen Zeile 2 und 3 mit dem was dir in den Eigenschaften für diese Datei angezeigt wird. Ich hab jetzt ehrlich gesagt keine Datei parat, die ich zur Sommerzeit zu einer Uhrzeit erstellt habe, an die ich mich noch erinnern kann ... Ich weiß nicht ob die Filetime in diesem Fall für die Anzeige von Sommer in Winterzeit umgerechnet wird. Würde mich aber nicht wundern. Denn die Filetime Eigenschaft selbst, ist UTC. Die Lokalisierte Zeit erledigt die Explorer Shell.

Steffen
Member: Loki.81
Loki.81 Oct 30, 2020 at 14:02:01 (UTC)
Goto Top
Ja, dein Echo gibt die Uhrzeit der Datei bei älteren Dateien auch eine Stunde früher an, als es im Windows Explorer angezeigt wird.
Änderungsuhrzeit laut Explorer 04:20, Echo der Batch 03:20.

Bei Videos die nach der Zeitumstellung erstellt wurden, besteht das Problem nicht. face-smile
Mitglied: 146189
Solution 146189 Oct 30, 2020 updated at 15:25:28 (UTC)
Goto Top
Würde das ja gleich mit nem bisl Powershell machen, geht auch mit nem Einzeiler in ne Batch verpflanzt wenn man unbedingt will:
@echo off
set "quelle=D:\Videos"  
set "ziel=D:\Ziel"  
powershell -EP Bypass -C "ls '%quelle%' -File -Recurse | ?{$_.LastWriteTime.Hour -ge 22 -or $_.LastWriteTime.Hour -lt 6} | cp -Destination '%ziel%' -verbose"  
Member: rubberman
rubberman Oct 30, 2020 at 15:13:46 (UTC)
Goto Top
dein Echo gibt die Uhrzeit der Datei bei älteren Dateien auch eine Stunde früher an
Dann ist das ein Problem der CMD, kann ich also nicht beeinflussen.
Wenn der PS Aufruf von @146189 für dich auch OK ist, nutze den. Lediglich Option -Recurse bzw. -s müsstest du noch für ls ergänzen, um Unterverzeichnisse mit einzubeziehen.

Steffen
Member: Loki.81
Loki.81 Nov 03, 2020 at 11:08:27 (UTC)
Goto Top
Danke für Eure Hilfe...

Die PS schaue ich mir bei Gelegenheit nochmal an.
Vorerst reicht die Batch aber mal aus!