Sommerzeit-EXIF automatisch korrigieren mit PowerShell

· Software · ⏱️ 3 min

Ein häufiges Problem bei Digitalkameras: Die Sommerzeit ist noch in der Kamera aktiviert, obwohl bereits Winterzeit ist. Die Zeitstempel in den Fotos sind dadurch eine Stunde falsch und das fällt oft erst später auf, wenn man die Bilder sortiert oder mit anderen Fotos abgleicht.

Viele Kameras speichern die Sommerzeit-Einstellung in den EXIF-Daten. Bei Nikon-Kameras findet sich das "Daylight Savings"-Flag in den MakerNotes. Solange dieses auf "Yes" steht, sind die Zeitstempel um eine Stunde vorgestellt.

Das PowerShell-Script durchsucht alle Bilddateien (z.B. NEF bei Nikon), prüft ob das Sommerzeit-Flag noch aktiv ist, und korrigiert dann:

Die EXIF-Zeitstempel werden um 1 Stunde zurückgestellt Das Sommerzeit-Flag wird deaktiviert Die Windows-Datei-Zeitstempel (Erstellt/Geändert) werden angepasst.
Das Script nutzt das kostenlose Tool exiftool und zeigt für jede Datei übersichtlich an, was geändert wurde. Dateien mit bereits korrekter Zeit werden einfach übersprungen.

Der exiftool-Pfad ist oben im Script konfigurierbar. Einfach das Script im Foto-Ordner ausführen. Unterordner werden automatisch durchsucht.

Das Ergebnis: Konsistente, korrekte Zeitstempel in allen Fotos, ohne manuelle Arbeit.

# PowerShell Script zur Korrektur der Sommerzeit in NEF-Dateien
# Stellt die EXIF-Zeit um eine Stunde vor für Dateien, die Sommerzeit in Nikon MakerNotes haben

# Testaufruf um DaylightSavings auszulesen:
# C:\tools\exiftool -DaylightSavings DSC_1234.NEF
# Daylight Savings                : No

# ===== KONFIGURATION =====
$exiftoolPath = "C:\tools\exiftool" 
# =========================

# Pfad zum aktuellen Verzeichnis
$baseDir = $PSScriptRoot

# Alle NEF-Dateien finden
$nefFiles = Get-ChildItem -Path $baseDir -Recurse -Filter "*.NEF"

Write-Host "Gefundene NEF-Dateien: $($nefFiles.Count)" -ForegroundColor Cyan

$correctedCount = 0
$skippedCount = 0

foreach ($file in $nefFiles) {
    Write-Host "`nPrüfe: $($file.FullName)" -ForegroundColor Yellow

    try {
        # Lese Nikon Daylight Savings Flag aus MakerNotes
        $daylightSavings = & $exiftoolPath -s -s -s -DaylightSavings $file.FullName 2>&1

        if ($LASTEXITCODE -ne 0) {
            Write-Host "⚠ Konnte MakerNotes nicht lesen" -ForegroundColor DarkYellow
            $skippedCount++
            continue
        }

        Write-Host "Daylight Savings: $daylightSavings" -ForegroundColor Cyan

        # Prüfe, ob Sommerzeit aktiviert ist (Yes oder On)
        if ($daylightSavings -match "Yes|On") {
            Write-Host "→ Sommerzeit ist aktiviert - Korrektur erforderlich" -ForegroundColor Magenta

            # Zeige aktuelle Zeit
            $currentTime = & $exiftoolPath -s -s -s -DateTimeOriginal $file.FullName
            Write-Host "Aktuelle Zeit: $currentTime" -ForegroundColor White

            # Stellt die Zeit um 1 Stunde zurück (-1 Stunde)
            # -AllDates betrifft DateTimeOriginal, CreateDate und ModifyDate
            Write-Host "Stelle Zeit um 1 Stunde zurück und setze Sommerzeit zurück..." -ForegroundColor Magenta

            & $exiftoolPath -AllDates-=1:0:0 -DaylightSavings=No -overwrite_original $file.FullName 2>&1 | Out-Null

            if ($LASTEXITCODE -eq 0) {
                $newTime = & $exiftoolPath -s -s -s -DateTimeOriginal $file.FullName
                $newDST = & $exiftoolPath -s -s -s -DaylightSavings $file.FullName
                Write-Host "✓ Erfolgreich aktualisiert: $newTime" -ForegroundColor Green
                Write-Host "  Sommerzeit jetzt: $newDST" -ForegroundColor Green

                # Setze Windows-Datei-Zeitstempel auf korrigierte EXIF-Zeit
                try {
                    $exifDateTime = [DateTime]::ParseExact($newTime, "yyyy:MM:dd HH:mm:ss", $null)
                    $file.CreationTime = $exifDateTime
                    $file.LastWriteTime = $exifDateTime
                    Write-Host "  Datei-Zeitstempel aktualisiert" -ForegroundColor Green
                } catch {
                    Write-Host "  ⚠ Konnte Datei-Zeitstempel nicht setzen: $_" -ForegroundColor DarkYellow
                }

                $correctedCount++
            } else {
                Write-Host "✗ Fehler beim Aktualisieren" -ForegroundColor Red
            }
<#
 #>
        } else {
            Write-Host "→ Keine Sommerzeit - wird übersprungen" -ForegroundColor Gray
            $skippedCount++
        }
    }
    catch {
        Write-Host "✗ Fehler: $_" -ForegroundColor Red
        Write-Host "Stelle sicher, dass exiftool installiert ist und im PATH verfügbar ist." -ForegroundColor Yellow
        break
    }
}

Write-Host "`n=== Fertig ===" -ForegroundColor Cyan
Write-Host "Korrigierte Dateien: $correctedCount" -ForegroundColor Green
Write-Host "Übersprungene Dateien: $skippedCount" -ForegroundColor Gray
Write-Host "Gesamt geprüft: $($nefFiles.Count)" -ForegroundColor Cyan