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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 616926
Url: https://administrator.de/contentid/616926
Ausgedruckt am: 26.11.2024 um 08:11 Uhr
11 Kommentare
Neuester Kommentar
@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
Oh jetzt stellst du ne gute Frage. Vergleiche mal ein
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
echo "%%~i" %%~j&pause
Steffen
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"
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