Abfrage nach Änderungszeitpunkt einer Datei
Hallo zusammen!
Tja, ich stehe mal wieder vor einem Rätsel, folgendes würde benötigt werden:
In einem Verzeichnis liegt eine Datei, eine einzige!
Diese wird irgendwann einer Änderung unterzogen (überschrieben durch Update), wodurch mindestens Zeit, möglicherweise auch Datum der Datei, verändert werden.
In diesem Fall, also wenn sich etwas an der Datei tut, würde ich gerne ein Textfile kreieren lassen und evtl., wenn irgendwie machbar, auch die Datei (neu, alt wurde ja überschrieben...) woanders hinkopieren, um den Inhalt und somit die Änderungen prüfen zu können.
Wenn man die auch noch per BAT automatisch ausgeben lassen kann, wäre es natürlich ein Traum!!!
Da steht in etwa folgendes drinnen, immer in gleicher Grundform:
#
#Wed May 13 11:25:35 CEST 2009
A=XYZ
B=egal
C=irgendwas
D=völlig egal
E=ZYX
F=vollkommen egal
G=ABC
H=auch egal
I=egal
Interessant wären rüf mich also nur die Zeilen 3 (XYZ), 7 (ZYX) und eventuell 9 (ABC), in denen sich die Angaben ändern.
Der Rest ist relativ egal und ändert sich eh kaum...
Tja, wer hätte denn Rat für mich und hilft mir aus der Misere?!?
Ich danke Euch schon im Voraus,
LFS1993
Tja, ich stehe mal wieder vor einem Rätsel, folgendes würde benötigt werden:
In einem Verzeichnis liegt eine Datei, eine einzige!
Diese wird irgendwann einer Änderung unterzogen (überschrieben durch Update), wodurch mindestens Zeit, möglicherweise auch Datum der Datei, verändert werden.
In diesem Fall, also wenn sich etwas an der Datei tut, würde ich gerne ein Textfile kreieren lassen und evtl., wenn irgendwie machbar, auch die Datei (neu, alt wurde ja überschrieben...) woanders hinkopieren, um den Inhalt und somit die Änderungen prüfen zu können.
Wenn man die auch noch per BAT automatisch ausgeben lassen kann, wäre es natürlich ein Traum!!!
Da steht in etwa folgendes drinnen, immer in gleicher Grundform:
#
#Wed May 13 11:25:35 CEST 2009
A=XYZ
B=egal
C=irgendwas
D=völlig egal
E=ZYX
F=vollkommen egal
G=ABC
H=auch egal
I=egal
Interessant wären rüf mich also nur die Zeilen 3 (XYZ), 7 (ZYX) und eventuell 9 (ABC), in denen sich die Angaben ändern.
Der Rest ist relativ egal und ändert sich eh kaum...
Tja, wer hätte denn Rat für mich und hilft mir aus der Misere?!?
Ich danke Euch schon im Voraus,
LFS1993
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 115971
Url: https://administrator.de/forum/abfrage-nach-aenderungszeitpunkt-einer-datei-115971.html
Ausgedruckt am: 20.05.2025 um 00:05 Uhr
9 Kommentare
Neuester Kommentar
Moin LFS1993,
zwei Rückfragen dazu.
1) für mich sind ja zwei "Änderungsdatum"-Werte erkennbar. Zum einen die Zeile 1 des Dateiinhalts (also ein Datum IN der Datei und das Änderungsdatum außen AN der Datei. Ich würde nahelegen, den Status "geänderte Datei" am Datum IN der Datei zu prüfen. Denn falls aus irgendwelche Gründen eine [inhaltlich identische] Datei mehrfach gesendet/kopiert wird, hast Du unnötigen Aufwand.
2) ich würde als Strategie eher empfehlen, den Inhalt der Datei jeweils komplett in eine neue Datei "updateChronik.log" in einem anderen Verzeichnis anzuhängen, wenn sich dieses erwähnte Zeile-1-Datum ändert.
Dazu müsstest Du Du eigentlich nur eine Datei "updatechronik.log" irgendwo einmalig anlegen und mit
Findstr.exe wahlweise die Zeile 1 oder die Zeile mit dem String " CEST " rausfiltern und genau diese in der "updatechronik.log" suchen.
Wenn gefunden --- okay, kennst Du schon.
Wenn nicht --> komplette aktuelle Update.log dort anhängen.
Grüße
Biber
zwei Rückfragen dazu.
1) für mich sind ja zwei "Änderungsdatum"-Werte erkennbar. Zum einen die Zeile 1 des Dateiinhalts (also ein Datum IN der Datei und das Änderungsdatum außen AN der Datei. Ich würde nahelegen, den Status "geänderte Datei" am Datum IN der Datei zu prüfen. Denn falls aus irgendwelche Gründen eine [inhaltlich identische] Datei mehrfach gesendet/kopiert wird, hast Du unnötigen Aufwand.
2) ich würde als Strategie eher empfehlen, den Inhalt der Datei jeweils komplett in eine neue Datei "updateChronik.log" in einem anderen Verzeichnis anzuhängen, wenn sich dieses erwähnte Zeile-1-Datum ändert.
Dazu müsstest Du Du eigentlich nur eine Datei "updatechronik.log" irgendwo einmalig anlegen und mit
Findstr.exe wahlweise die Zeile 1 oder die Zeile mit dem String " CEST " rausfiltern und genau diese in der "updatechronik.log" suchen.
Wenn gefunden --- okay, kennst Du schon.
Wenn nicht --> komplette aktuelle Update.log dort anhängen.
Grüße
Biber
Moin LFS1993,
na ja, machbar ist es natürlich.
Nur kommt es dann wieder darauf an, ob Du
Für die erste beschriebene Variante gibt es einige Tools zur [Suchmaschinen-Stichwort] "Ordnerüberwachung"
Für die zweite (regelmäßig prüfen) brauchst Du eigentlich nur einen Batch, der eine in einer Hilfsdatei gespeicherte DIR-Ausgabezeile (Referenzwerte der Ausgangsdatei) mit dem aktuellen Stand vergleicht.
Beispiel/Demo am CMD-Prompt mit einer Datei sysinfo.txt
Wenn die eine hier erzeugte Referenzzeile in eine Datei "\einverzeichnis\Update.ref" umgeleitet wird mit ">" dann kannst Du diese Zeile jederzeit mit der aktuellen DIR/Findstr-Ausgabe vergleichen und reagieren, wenn sich was-auch-immer geändert hat.
Grüße
Biber
na ja, machbar ist es natürlich.
Nur kommt es dann wieder darauf an, ob Du
- diese Dateiänderung wirklich "überwachen" willst -- Änderung um 18:12:03 löst SOFORT zu diesem Zeitpunkt welche Reaktion auch immer aus
- oder ob Du es "nur" alle 15 Minuten oder 3x täglich (oder 3x wöchentlich oder am 1. jeden Monats) prüfen willst per Task
Für die erste beschriebene Variante gibt es einige Tools zur [Suchmaschinen-Stichwort] "Ordnerüberwachung"
Für die zweite (regelmäßig prüfen) brauchst Du eigentlich nur einen Batch, der eine in einer Hilfsdatei gespeicherte DIR-Ausgabezeile (Referenzwerte der Ausgangsdatei) mit dem aktuellen Stand vergleicht.
Beispiel/Demo am CMD-Prompt mit einer Datei sysinfo.txt
>dir sysinfo.txt|findstr /i sysinfo.txt
06.04.09 21:31 2.174 sysinfo.txt
Grüße
Biber
Moin LFS1993,
sorry, ich habe deinen Beitrag etwas aus dem Auge verloren (Werder Bremen steht im Moment in so vielen Finalrunden, da kostet das Feiern so viel Zeit).
Ich denke, die Umleitung innerhalb der ") ELSE (" -Zeile macht die Probleme.
So sollte die IF ... ) ELSE ( ...)"- Konstruktion eher funktionieren.
[mehr habe ich nicht ernsthaft angeschaut oder getestet]
Grüße
Biber
sorry, ich habe deinen Beitrag etwas aus dem Auge verloren (Werder Bremen steht im Moment in so vielen Finalrunden, da kostet das Feiern so viel Zeit).
Ich denke, die Umleitung innerhalb der ") ELSE (" -Zeile macht die Probleme.
for %%f in ("D:\Original_A.txt") do @for /f %%f in ("%%~tf") do set %time0%
for %%f in ("D:\A.txt") do @for /f %%f in ("%%~tf") do set %time1%
if "%time0%"=="%time1%" (
echo Alles unverändert. >"D:\NotChanged.txt"
) else (
echo Es ist eine Änderung erfolgt!!!! >"D:\WasChanged.txt"
)
So sollte die IF ... ) ELSE ( ...)"- Konstruktion eher funktionieren.
[mehr habe ich nicht ernsthaft angeschaut oder getestet]
Grüße
Biber
Moin LFS1993,
sorry, ich war gestern wirklich etwas in Eile und habe da unnötigerweise eine schnelle Antwort hingepfuscht, weil ich eigentlich schon längst an einem Ort sein wollte, der noch netter ist als dieses Forum..
So, jetzt mal ein etwas zielführenderer Ansatz, wenn auch mit viel Copy/paste und Democode:
Dieser Demo-Schnipsel, der (festverdrahtet) zwei bestimmte Dateien prüft, die auch beide existieren [keinerlei Prüfung!] bringt:
Die wesentliche Änderung -- die SETterei der Zeitvariablen ist jetzt richtiger.
Und ich habe oben eine weitere IF-Bedingung eingebaut, die -solange die Zeile "set testing=whatever" nicht gelöscht wird, die Ausgaben in beiden Fällen auf den Bildschirm statt in eine Datei ausgibt.
Grüße
Biber
sorry, ich war gestern wirklich etwas in Eile und habe da unnötigerweise eine schnelle Antwort hingepfuscht, weil ich eigentlich schon längst an einem Ort sein wollte, der noch netter ist als dieses Forum..
So, jetzt mal ein etwas zielführenderer Ansatz, wenn auch mit viel Copy/paste und Democode:
::--------- snipp chkChanged.cmd ----
@echo off & setlocal
Set "Testing=BesserIsDas"
If defined testing (
Set "ChangedOut=Con:"
Set "notChangedOut=Con:"
) ELSE (
Set "ChangedOut=D:\Changed.txt"
Set "notChangedOut=D:\NotChanged.txt"
)
for %%f in ("D:\temp\temp.txt") do echo set "time0=%%~tf"
for %%f in ("D:\temp\text.txt") do echo set "time1=%%~tf"
for %%f in ("D:\temp\temp.txt") do set "time0=%%~tf"
for %%f in ("D:\temp\text.txt") do set "time1=%%~tf"
if "%time0%"=="%time1%" (
echo Alles unverändert. >%notChangedOut%
) else (
echo Es ist eine Änderung erfolgt t0[%time0%] t1[%time1%]!!!! >%changedOut%
)
::----- snapp -------
Dieser Demo-Schnipsel, der (festverdrahtet) zwei bestimmte Dateien prüft, die auch beide existieren [keinerlei Prüfung!] bringt:
>e:\schnipsel\chkchanged.bat
set "time0=05.03.09 13:44"
set "time1=07.07.08 13:04"
Es ist eine Änderung erfolgt t0[05.03.09 13:44] t1[07.07.08 13:04]
Die wesentliche Änderung -- die SETterei der Zeitvariablen ist jetzt richtiger.
Und ich habe oben eine weitere IF-Bedingung eingebaut, die -solange die Zeile "set testing=whatever" nicht gelöscht wird, die Ausgaben in beiden Fällen auf den Bildschirm statt in eine Datei ausgibt.
Grüße
Biber