Pfandfinder
Lieutenant
- Registriert
- Nov. 2020
- Beiträge
- 761
hallo,
ich habe diesen Part eines Scripts um bei meinen Fotos der Action Cam mit exiftool das korrekte Aufnahmedatum zu setzen wenn es abweicht. Ich erhalte aber immer den Fehler:
Selbst die KI kann den Fehler nicht beheben, er bleibt, egal was sie ändert. Weiß jemand was das Problem ist ? Es ist wohl etwas in der for-Schleife.
ich habe diesen Part eines Scripts um bei meinen Fotos der Action Cam mit exiftool das korrekte Aufnahmedatum zu setzen wenn es abweicht. Ich erhalte aber immer den Fehler:
Code:
"|" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
Selbst die KI kann den Fehler nicht beheben, er bleibt, egal was sie ändert. Weiß jemand was das Problem ist ? Es ist wohl etwas in der for-Schleife.
Code:
for %%F in (DJI_*.jpg CAM_*.jpg) do (
set "FNAME=%%~nF"
set "DATECORRECTED=0"
rem Datum aus Dateiname extrahieren: sucht 14-stellige Zahl (YYYYMMDDHHmmss)
for /f "tokens=*" %%D in ('powershell -NoProfile -Command ^
"if ('!FNAME!' -match '(\d{14})') { $m = $Matches[1]; $dt = [datetime]::ParseExact($m, 'yyyyMMddHHmmss', $null); $exif = $dt.ToString('yyyy:MM:dd HH:mm:ss'); $fs = $dt.ToString('yyyyMMddHHmmss'); $iso = $dt.ToString('yyyy-MM-ddTHH:mm:ss'); Write-Output \"$exif|$fs|$iso\" } else { Write-Output 'KEIN_DATUM' }"') do (
set "PARSED=%%D"
)
if not "!PARSED!"=="KEIN_DATUM" (
rem Teile zerlegen: EXIF-Datum | FileDate | ISO fuer Vergleich
for /f "tokens=1,2,3 delims=|" %%A in ("!PARSED!") do (
set "EXIF_DATE=%%A"
set "FS_DATE=%%B"
set "ISO_DATE=%%C"
)
rem Aktuelles EXIF-Aufnahmedatum lesen und Differenz pruefen
for /f "tokens=*" %%T in ('powershell -NoProfile -Command ^
"$raw = (& %EXIFTOOL% -s3 -DateTimeOriginal '%%F' 2^>$null); if ($raw -match '(\d{4}):(\d{2}):(\d{2}) (\d{2}):(\d{2}):(\d{2})') { $exif = [datetime]::ParseExact($raw.Trim(), 'yyyy:MM:dd HH:mm:ss', $null); $fn = [datetime]::ParseExact('!ISO_DATE!', 'yyyy-MM-ddTHH:mm:ss', $null); $diff = [Math]::Abs(($exif - $fn).TotalSeconds); Write-Output $diff } else { Write-Output '999999' }"') do (
set "DIFF_SEC=%%T"
)
rem Wenn Abweichung > 60 Sekunden: Datum aus Dateiname setzen
for /f "tokens=*" %%C in ('powershell -NoProfile -Command "if (!DIFF_SEC! -gt 60) { 'JA' } else { 'NEIN' }"') do (
set "DO_CORRECT=%%C"
)
if "!DO_CORRECT!"=="JA" (
echo [DATUM KORRIGIERT] %%F: Abweichung !DIFF_SEC! Sek. ^> Setze !EXIF_DATE!
%EXIFTOOL% -overwrite_original -P ^
-EXIF:DateTimeOriginal="!EXIF_DATE!" ^
-EXIF:CreateDate="!EXIF_DATE!" ^
-EXIF:ModifyDate="!EXIF_DATE!" ^
-EXIF:OffsetTimeOriginal=!TIMEZONE! ^
-ImageDescription= ^
-MakerNotes:all= ^
"%%F"
powershell -NoProfile -Command ^
"$f = '%%F'; $dt = [datetime]::ParseExact('!ISO_DATE!', 'yyyy-MM-ddTHH:mm:ss', $null); (Get-Item $f).CreationTime = $dt; (Get-Item $f).LastWriteTime = $dt"
set "DATECORRECTED=1"
)
)
if "!DATECORRECTED!"=="0" (
%EXIFTOOL% -overwrite_original -P ^
-EXIF:OffsetTimeOriginal=!TIMEZONE! ^
-ImageDescription= ^
-MakerNotes:all= ^
"%%F"
)
)