FILE_TSTMP v1.01 - ndern der Zeitstempel von Dateien
=====================================================

Copyright (c) 2006 Sven Hader


Einsatzzweck
------------

Diese Konsolenanwendung(*) fr Windows 2000/XP kann zur nderung der
Zeitstempel von Dateien verwendet werden.

(*) Konsolenanwendungen sind Programme, die ausschlielich im Fenster der
    Eingabeaufforderung ("DOS-Fenster") lauffhig sind. Sie besitzen keine
    grafische Benutzeroberflche und werden meist durch Angabe von Optionen
    in der Kommandozeile gesteuert. 

Unter modernen Windows-Betriebssystemen besitzen Dateien drei Zeitstempel:

  (1) Einen 'erzeugt am'-Zeitstempel, der angibt, wann die Datei erzeugt
      wurde.
  (2) Einen 'gendert am'-Zeitstempel, der angibt, wann die Datei zuletzt
      modifiziert wurde.
  (3) Einen 'zuletzt zugegriffen am'-Zeitstempel, der angibt, wann zuletzt
      auf die Datei zugegriffen wurde.

Die Zeitstempel bestehen jeweils aus einem Datum und einer Uhrzeit.
Je nach Betriebssystemversion und Format des Datentrgers (NTFS, FAT)
sind bestimmte Zeitstempel eventuell nicht verfgbar oder enthalten
immer die Uhrzeit "00:00:00".

Die Zeitstempel knnen im Eigenschaften-Fenster der Datei angezeigt werden
(erreichbar ber das Kontextmen). Zudem zeigt der Windows-Explorer in der
Detailansicht standardmig den 'gendert am'-Zeitstempel an.

Das ndern einzelner oder aller Zeitstempel einer Datei kann sinnvoll
sein, wenn bestimmte Zeitpunkte mit der Datei verknpft werden sollen,
die nicht mit den vom Betriebssystem erfaten erzeugt/gendert/zugegriffen-
Ereignissen identisch sind. Zwei Beispiele:

  A) Die Datei ist das Ergebnis der Konvertierung oder anderweitigen
     Bearbeitung eines Digitalfotos. Wnschenswert wre hier, wenn die
     Zeitstempel der Datei den Aufnahmezeitpunkt reprsentieren wrden
     und nicht den Zeitpunkt der Bearbeitung auf dem Computer.

  B) In einem Softwareprojekt wre es wnschenswert, wenn alle enthaltenen
     Dateien dieselben Zeitstempel besitzen wrden, die das offizielle
     Releasedatum des Projekts reprsentieren.
   

Warnung
-------

Es kann nicht davon ausgegangen werden, da das Betriebssystem oder andere
Software die Zeitstempel rein zu Anzeigezwecken verwenden. Bestimmte
Programme (z.B. Backup-Software, Virenscanner) knnten anhand der Zeitstempel
oder der Vernderung von Zeitstempeln bestimmte Prozesse starten bzw. steuern.
Durch manuelle nderung der Zeitstempel knnte die Ausfhrung dieser Prozesse
verhindert oder die Prozesse in nicht vorhersehbarer (ggf. sogar schdlicher)
Weise beeinflut werden. 
Zudem ist es nicht mglich, genderte Zeitstempel auf den ursprnglichen
Wert zurckzusetzen, wenn diese Werte nicht mehr explizit bekannt sind.

Das vorliegende Programm wurde nur unter dem Betriebssystem Windows 2000 und
dem Datentrgerformat NTFS ausfhrlicher getestet. Die Funktion unter anderen
Windows-Betriebssystemen und Datentrgerformaten ist mglich; dazu liegen
jedoch keine verllichen Informationen vor.

Aus diesen Grnden erfolgt die Verwendung von FILE_TSTMP ausschlielich auf
eigene Gefahr. Detaillierte Informationen zu den Gewhrleistungsbestimmungen
und dem Haftungsausschlu finden Sie in der beiliegenden Textdatei 
'disclaimer.txt' oder durch Aufruf von FILE_TSTMP mit der Option '-i'.


Umfang des Softwarepakets
-------------------------

Das Softwarepaket besteht aus folgenden Dateien:

  + file_tstmp.exe      (ausfhrbares Programm zum Zeitstempel-ndern)
  + reset_ma_tstmp.cmd  (Beispiel-Stapelverarbeitungsprogramm 1)
  + set_exdate_dng.cmd  (Beispiel-Stapelverarbeitungsprogramm 2)
  + readme.txt          (Dokumentation)
  + licence.txt         (Lizenzbedingungen)
  + disclaimer.txt      (Gewhrleistungsbestimmungen und Haftungsausschlu)
  + history.txt         (nderungshistorie)


Installation von FILE_TSTMP
---------------------------

Das vorliegende Programm kann ohne explizite Installation verwendet werden,
indem die Programmdatei in einem beliebigen Verzeichnis gespeichert wird
(im folgenden "Programmverzeichnis" genannt). Wenn es in einem anderen
als dem Programmverzeichnis ausgefhrt werden soll, mu entweder beim 
Programmaufruf der absolute oder relative Pfad zum Programmverzeichnis
angegeben werden oder das Programmverzeichnis mu Bestandteil des Suchpfades
sein. 

Die Aufnahme des Programmverzeichnisses in den Suchpfad erfolgt durch
Erweiterung der Umgebungsvariablen 'Path', entweder temporr durch den
Befehl 'path' oder dauerhaft unter Systemsteuerung -> System -> Erweitert ->
Umgebungsvariablen. 


Verwendung von FILE_TSTMP
-------------------------

Syntax:    file_tstmp [-d <datum>] [-t <uhrzeit>] [-f <dname> [-F <schema>]]
                      [-c] [-m] [-a] [-H] [-s] [-S] [-h] Dateien...

Optionen:  -d <datum>

           Mit dieser Option legen Sie das neue Datum der zu ndernden
           Zeitstempel fest. Die Angabe von <datum> erfolgt im Format
           dd.mm.yyyy (z.B. 14.09.2006). Das Datum mu zwischen dem
           01.01.1980 und dem 31.12.2100 liegen und gltig sein.
           Wenn diese Option nicht angegeben wurde und auch die Option
           '-f' fehlt (s.u.), wird das aktuelle Datum verwendet.

           -t <uhrzeit>

           Mit dieser Option legen Sie die neue Uhrzeit der zu ndernden
           Zeitstempel fest. Die Angabe von <uhrzeit> erfolgt im Format
           hh:mm:ss (z.B. 20:15:00).
           Wenn diese Option nicht angegeben wurde und auch die Option
           '-f' fehlt (s.u.), wird die aktuelle Uhrzeit verwendet.

           -f <dname>

           Mit dieser Option legen Sie eine Referenzdatei fest, von der die
           zu ndernden Zeitstempel bernommen werden. Die Angabe des
           Dateinamens <dname> erfolgt im gebruchlichen Windows-Format.
           Der Dateiname darf keine Wildcard-Zeichen (*,?) enthalten; wenn
           der Name Leerzeichen enthlt, mu er in Anfhrungszeichen "..."
           eingeschlossen werden.

           -F <schema>

           Mit dieser Option legen Sie fest, wie die zu ndernden Zeitstempel
           den Zeitstempeln der Referenzdatei zugeordnet werden sollen.
           <schema> ist dabei eine dreistellige Zeichenkette, wobei die erste
           Position den zu ndernden 'erzeugt am'-Zeitstempel, die zweite
           Position den zu ndernden 'gendert am'-Zeitstempel und die dritte
           Position den zu ndernden 'zuletzt zugegriffen am'-Zeitstempel
           reprsentiert. An jeder Position kann eines der folgenden Zeichen
           stehen:
             c - 'erzeugt am'-Zeitstempel der Referenzdatei
             m - 'gendert am'-Zeitstempel der Referenzdatei
             a - 'zuletzt zugegriffen am'-Zeitstempel der Referenzdatei
             o - keine Zuordnung

           Bsp.:  (1) cma  -->  es existiert eine 1:1-Zuordnung zwischen den
                                zu ndernden Zeitstempeln und den 
                                Zeitstempeln der Referenzdatei
                  (2) oco  -->  dem zu ndernden 'gendert am'-Zeitstempel
                                ist der 'erzeugt am'-Zeitstempel der
                                Referenzdatei zugeordnet

           WICHTIG:  Das Schema legt nur die Zuordnung der Zeitstempel fest
                     und nicht, welche Zeitstempel tatschlich gendert
                     werden. Letzteres erfolgt durch Angabe der Optionen
                     '-c', '-m' und '-a'. 
           Ausnahme: Wenn durch Angabe von 'o' im Schema keine Zuordnung
                     vorgenommen wurde, kann der entsprechende Zeitstempel
                     grundstzlich nicht gendert werden.

           Wenn diese Option nicht angegeben wurde oder wenn die Option '-f'
           fehlt, wird das Schema 'cma' verwendet.

           -c

           Mit dieser Option legen Sie fest, da der 'erzeugt am'-Zeitstempel
           zu ndern ist.

           -m

           Mit dieser Option legen Sie fest, da der 'gendert am'-
           Zeitstempel zu ndern ist.

           -a

           Mit dieser Option legen Sie fest, da der 'zuletzt zugegriffen
           am'- Zeitstempel zu ndern ist.

           Der neue Wert des jeweiligen Zeitstempels wird nach folgender
           Logik ermittelt:

             (1) Basis des neuen Wertes ist der aktuelle Wert des
                 zugeordneten Zeitstempels der Referenzdatei (falls 
                 angegeben) oder das aktuelle Datum/Zeit.
             (2) Wenn mittels Option '-d' ein explizites Datum angegeben
                 wurde, berschreibt dieses das Datum des neuen Wertes.
             (3) Wenn mittels Option '-t' eine explizite Uhrzeit angegeben
                 wurde, berschreibt diese die Uhrzeit des neuen Wertes.

           WICHTIG: Beim ndern der Zeitstempel erfolgt kein Test, ob die
                    einzelnen Zeitstempel in der korrekten Relation
                    'erzeugt am' <= 'gendert am' <= 'zuletzt zugegriffen am'
                    zueinander stehen. Grund hierfr ist, da selbst Windows
                    diese "logische" Relation nicht bercksichtigt, wodurch
                    z.B. nach dem Kopieren von Dateien der 'gendert am'-
                    Zeitstempel vor dem 'erzeugt am'-Zeitstempel liegt.

           Mindestens eine der Optionen '-c', '-m' und '-a' mu angegeben
           werden, damit mindestens ein Zeitstempel gendert wird.

           -H

           Mit dieser Option legen Sie fest, da auch die Zeitstempel
           versteckter Dateien gendert werden knnen.

           WICHTIG: Das ndern der Zeitstempel von schreibgeschtzten oder
                    Systemdateien sowie von Verzeichnissen ist hingegen
                    grundstzlich nicht mglich.

           -s

           Mit dieser Option legen Sie fest, da das Programm keinerlei
           Bildschirmausgaben generiert (Silent-Modus). Dieser Modus
           bietet sich z.B. an, wenn das Programm in Stapelverarbeitungs-
           programmen ("Batch") verwendet wird.

           -S

           Mit dieser Option legen Sie fest, da das Programm die nderung
           der Zeitstempel nur simuliert. Dabei wird sowohl die Logik zur
           Bestimmung der neuen Zeitstempel-Werte durchlaufen als auch der
           Zugriff auf die zu ndernden Dateien getestet. Auftretende Fehler
           werden durch entsprechende Meldungen signalisiert.

           Der Simulationsmodus bietet sich insbesondere dann an, wenn
           die Zeitstempel einer greren Anzahl von Dateien gleichzeitig
           gendert werden sollen (die z.B. mittels Wildcards spezifiziert
           werden). Da die nderung der Zeitstempel nicht rckgngig gemacht
           werden kann, sollte man sich in diesem Fall sicher sein, da nur
           genau die gewnschten Dateien zur nderung selektiert werden.
           Dies kann sichergestellt werden, indem das Programm zuerst im
           Simulationsmodus ausgefhrt wird, dann anhand der Ausgaben die
           selektierten Dateien geprft und abschlieend das Programm im
           ndern-Modus (d.h. ohne Option '-S') ausgefhrt wird.

           WICHTIG: Wenn Sie im Simulationsmodus arbeiten mchten, achten
                    Sie bitte darauf, da bei den Optionen zwischen Gro-
                    und Kleinbuchstaben unterschieden wird! Wenn Sie statt
                    '-S' aus Versehen die Option '-s' angeben, arbeiten
                    Sie nicht im Simulationsmodus sondern im ndern-Modus!

           -h

           Mit dieser Option legen Sie fest, da das Programm ausschlielich
           eine Kurzbeschreibung der Syntax ausgibt und dann endet.

           -i

           Mit dieser Option legen Sie fest, da das Programm ausschlielich
           Informationen zu den Gewhrleistungsbestimmungen, dem Haftungs-
           ausschlu und den Kontaktmglichkeiten ausgibt und dann endet.

           Dateien...

           Nach Angabe der gewnschten Optionen spezifizieren Sie die
           Dateien, deren Zeitstempel gendert werden sollen. Dabei geben
           Sie eine oder mehrere Dateinamen an, die die von Windows bekannten
           Wildcards (*,?) enthalten knnen.

           Wenn ein Dateiname Leerzeichen enthlt, mu er in Anfhrungs-
           zeichen "..." eingeschlossen werden, z.B. "test 1.txt".

           WICHTIG: Wenn Sie in diesem Fall die Anfhrungszeichen vergessen,
                    interpretiert das Programm die durch Leerzeichen
                    getrennten Bestandteile des Dateinamens als unabhngige
                    Dateinamen. Statt der Datei 'test 1.txt' ndert das
                    Programm dann die Zeitstempel der Dateien 'test' und
                    '1.txt' (falls diese existieren).                    

           Wenn Sie "reine" Verzeichnisnamen angeben (d.h. Verzeichnisnamen,
           denen kein Dateiname nachgestellt ist; z.B. 'C:\Tmp'), werden
           diese ignoriert. In diesem Fall werden nicht (wie vielleicht
           vermutet) alle Dateien des Verzeichnisses selektiert. Wenn Sie
           letzteres erreichen wollen, mssen Sie den Dateinamen mittels
           Wildcard spezifizieren, also z.B. 'C:\Tmp\*'. Beachten Sie in
           diesem Fall aber bitte den folgenden Hinweis zu Wildcards.

           WICHTIG: berlegen Sie bei der Verwendung von Wildcards bitte
                    genau, ob das angegebene Dateinamen-Muster ausschlielich
                    die gewnschten Dateien beschreibt, oder noch weitere,
                    die dann unbeabsichtigt mit gendert werden. Insbesondere
                    durch Angaben von '*' oder '*.*' kann ggf. eine sehr
                    groe Anzahl von Dateien selektiert werden. Wenn Sie
                    sich nicht sicher sind, fhren Sie das Programm zuerst
                    im Simulationsmodus aus (Option '-S'), um zu prfen, ob
                    nur genau die gewnschten Dateien selektiert werden.


Beendigungscode von FILE_TSTMP
------------------------------

Je nach Erfolg der Ausfhrung liefert das Programm einen der folgenden
Beendigungscodes ("Errorlevel") zurck:

  -1 - Bei der Ausfhrung des Programms ist ein Fehler aufgetreten, der
       zum Abbruch gefhrt hat. Mgliche Ursachen sind z.B. die Angabe
       unbekannter Optionen, das Fehlen von Optionsargumenten, die Angabe
       fehlerhafter Optionsargumente (z.B. "31.02.2006") oder eine nicht
       existierende Referenzdatei.

   0 - Das Programm wurde ohne das Auftreten von Fehlern ordnungsgem
       beendet, wobei jedoch keine Zeitstempel gendert wurden. Letzteres
       kann z.B. dadurch verursacht sein, da nur die Syntax angezeigt
       wurde (-h), da das Programm im Simulationsmodus gestartet wurde (-S)
       oder da keine der angegebenen Dateien existierte oder modifizierbar
       war.

   1 - Das Programm wurde ohne das Auftreten von Fehlern ordnungsgem
       beendet, wobei mindestens Zeitstempel einer Datei gendert wurden.

Die Beendigungscodes knnen im Rahmen von Stapelverarbeitungsprogrammen
verwendet werden, um je nach Ergebnis der Programmausfhrung unterschiedliche
Aktionen zu starten. 

Beispiele fr die Verwendung der Beendigungscodes sind in den Stapel-
verarbeitungsprogrammen 'reset_ma_tstmp.cmd' und 'set_exdate_dng.cmd'
enthalten, die Bestandteil dieses Softwarepakets sind.    


Typische Aufrufe von FILE_TSTMP
-------------------------------

  (1) file_tstmp -c text1.txt

      Dieser Aufruf setzt den 'erzeugt am'-Zeitstempel der Datei 'text1.txt'
      auf das aktuelle Datum und die aktuelle Uhrzeit. Die anderen
      Zeitstempel bleiben unverndert.

  (2) file_tstmp -c -m -a -d 15.09.2006 -t 20:45:00 text1.txt text2.txt

      Dieser Aufruf setzt alle Zeitstempel der Dateien 'text1.txt' und
      'text2.txt' auf '15.09.2006 20:45:00'.

  (3) file_tstmp -m -t 00:00:00 BIN\*.exe

      Dieser Aufruf setzt den 'gendert am'-Zeitstempel aller Dateien mit
      der Endung '.exe' im Unterverzeichnis 'BIN' auf das aktuelle Datum,
      00:00:00.

  (4) file_tstmp -c -m -a -f bild_alt.jpg bild_neu.jpg

      Dieser Aufruf kopiert alle Zeitstempel der Datei 'bild_alt.jpg' auf
      die Datei 'bild_neu.jpg'.

  (5) file_tstmp -c -f bild_alt.jpg -F moo bild_neu.jpg

      Dieser Aufruf kopiert den 'gendert am'-Zeitstempel der Datei
      'bild_alt.jpg' auf den 'erzeugt am'-Zeitstempel der Datei
      'bild_neu.jpg'.

  (6) file_tstmp -m -a -f text1.txt -F occ text1.txt

      Dieser Aufruf kopiert den 'erzeugt am'-Zeitstempel der Datei 
      'text1.txt' in den 'gendert am'- und den 'zuletzt zugegriffen am'-
      Zeitstempel derselben(!) Datei.


Beispiel-Stapelverarbeitungsprogramme
-------------------------------------

Dem Softwarepaket liegen die Stapelverarbeitungsprogramme 'reset_ma_tstmp.cmd'
und 'set_exdate_dng.cmd' bei, die die Verwendung von 'file_tstmp.exe' 
exemplarisch demonstrieren.

'reset_ma_tstmp.cmd':

  Dieses Programm setzt die 'gendert am'- und 'zuletzt zugegriffen am'-
  Zeitstempel einer Anzahl von Dateien auf den Inhalt des jeweiligen
  'erzeugt am'-Zeitstempels (= Erzeugungszeitpunkt). Dabei gelten folgende
  Annahmen:
    + Das Programm 'file_tstmp.exe' befindet sich im Aufrufverzeichnis oder in
      einem im Suchpfad enthaltenen Verzeichnis.
    + Dateinamen, die Leerzeichen enthalten, sind in Anfhrungszeichen
      eingeschlossen.

  Syntax:  reset_ma_tstmp <datei_1> ...

'set_exdate_dng.cmd':

  Dieses Programm setzt alle Zeitstempel ('erzeugt am', 'gendert am', 
  'zuletzt zugegriffen am') einer Anzahl von DNG-Bilddateien (DNG: 
  standardisiertes Raw-Format von Adobe) auf den Aufnahmezeitpunkt des Fotos.
  Dabei gelten folgende Annahmen:
    + Das Programm 'file_tstmp.exe' befindet sich im Aufrufverzeichnis oder in
      einem im Suchpfad enthaltenen Verzeichnis.
    + Alle DNG-Dateien befinden sich im selben Verzeichnis <dng_verzeichnis>.
    + Die Original-Bilddateien im CR2-Raw-Format befinden sich in einem
      Verzeichnis <cr2_verzeichnis> und besitzen dieselben Namen wie die
      zugehrigen DNG-Dateien (bis auf die Extension).
    + Der 'gendert am'-Zeitstempel der CR2-Dateien reprsentiert den
      Aufnahmezeitpunkt des Fotos.

  Hintergrund: Dateien mit Endung '.cr2' werden von bestimmten Canon-Digital-
               kameras (u.a. Canon EOS 5D) verwendet, um Bilddateien in einem
               (proprietren) Raw-Format zu speichern. Bei Konvertierung in
               Dateien des Adobe-Raw-Formats (Endung '.dng') gehen die
               ursprnglichen Zeitstempel verloren, die den Zeitpunkt der
               Aufnahme des Fotos reprsentieren. Wenn man auch den neuen
               DNG-Dateien im Windows Explorer "auf den ersten Blick" ihren
               Aufnahmezeitpunkt ansehen will, mu der 'gendert am'-Zeit-
               stempel der CR2-Dateien auf die DNG-Dateien kopiert werden.
               (Der 'gendert am'-Zeitstempel einer CR2-Datei enthlt
                allerdings den Aufnahmezeitpunkt nur solange diese nicht
                modifiziert wurde.)

  Syntax:  set_exdate_dng <cr2_verzeichnis> <dng_verzeichnis>
             
Die Programme knnen direkt verwendet werden (falls ihre Funktionalitt die
Anforderungen abdeckt) oder als Vorlage benutzt werden, um eigene Stapel-
verarbeitungsprogramme zu schreiben, die komplexere Logiken des
(insbesondere massenhaften) Zeitstempel-nderns realisieren.


Kontakt
-------

URL:    www.sven-hader.de
eMail:  software@sven-hader.de

