Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Abfrage nach Änderungszeitpunkt einer Datei

Frage Entwicklung Batch & Shell

Mitglied: LFS1993

LFS1993 (Level 1) - Jetzt verbinden

13.05.2009, aktualisiert 12:31 Uhr, 4457 Aufrufe, 9 Kommentare

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
Mitglied: Biber
13.05.2009 um 13:34 Uhr
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
Bitte warten ..
Mitglied: LFS1993
13.05.2009 um 17:30 Uhr
Hi Biber!

Tja, so einfach ist es leider nicht, die erste Zeile mit dem Datum IN der Datei wird nur bei Erstellung gefüllt, nicht bei Änderungen...
In dieser Datei werden nur Inhalte verändert, somit ändert sich das Datum AN der Datei, weshalb dieses abgefragt werden müßte!

Von daher wäre es mir im Endeffekt sogar egal ob man die Inhalte irgendwie weitermelden kann oder nicht, wichtig wäre das textfile oder eine Mail, in der mitgeteilt wird, daß sich etwas an der Datei geändert hat.

Ist so etwas machbar?!?

Gruß, LFS1993
Bitte warten ..
Mitglied: Biber
13.05.2009 um 18:22 Uhr
Moin LFS1993,

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
01.
>dir sysinfo.txt|findstr /i sysinfo.txt 
02.
06.04.09  21:31             2.174 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
Bitte warten ..
Mitglied: LFS1993
14.05.2009 um 12:44 Uhr
Hi Biber.

Also, es reicht aus jede Stunde oder sogar nur alle 3-6 Stunden mal zu prüfen, Echzeitprüfung muß nicht sein!

Ich hab versucht was mit dem Änderungsdatum der Datei A zu machen, die gegen das Original_A geprüft wird, sieht so aus, klappt aber nicht, leider:

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"


Leider klappt irgendwas mit den Variablen nicht, oder der ganze Ansatz is falsch, oder ich steh wieder mal völlig aufm Schlauch...

Wäre nett, wenn mir jemand sagen könnte, ob ich da auf einem machbaren Weg bin oder nicht und wie ich den zu Ende gehen könnte, herzlichen Dank schonmal!!!

Gruß, LFS1993
Bitte warten ..
Mitglied: LFS1993
19.05.2009 um 10:07 Uhr
Also, leider hat sich ja bisher keiner mehr zu Wort gemeldet, liegt es daran, daß ich da was vollkommen falsches versucht hab?!?
Sagt mir das doch bitte, ich kenn mich wie schonmal erwähnt einfach zu wenig mit BAT aus, um da wirklich den Plan zu haben, ich nutze sie gerne, veränder gern etwas, aber kann definitiv keine erstellen oder gar die wirklichen Hintergründe erkennen, leider!
Falls noch jemand ne Idee zu dem Thema hat wäre ich sehr dankbar,

Gruß, LFS1993
Bitte warten ..
Mitglied: Biber
19.05.2009 um 23:09 Uhr
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.

01.
for %%f in ("D:\Original_A.txt") do @for /f %%f in ("%%~tf") do set %time0% 
02.
for %%f in ("D:\A.txt") do @for /f %%f in ("%%~tf") do set %time1% 
03.
 
04.
if "%time0%"=="%time1%" (  
05.
       echo Alles unverändert. >"D:\NotChanged.txt" 
06.
 ) else (  
07.
echo Es ist eine Änderung erfolgt!!!! >"D:\WasChanged.txt" 
08.
)
So sollte die IF ... ) ELSE ( ...)"- Konstruktion eher funktionieren.
[mehr habe ich nicht ernsthaft angeschaut oder getestet]

Grüße
Biber
Bitte warten ..
Mitglied: LFS1993
20.05.2009 um 12:02 Uhr
Hallo Biber!

Tja, daran lag es dann wohl eher doch nicht, ich bekomme immer die Ausgabe "Alles unverändert.", auch wenn ich zwei Dateien völlig unterschiedlichen Datums und Uhrzeit vergleichen lasse...

Scheinbar hab ich da wieder irgendwas mit den Variablen verschleudert, eine teilweise Ausgabe sieht so aus:

ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\hierkönnteihrnamestehen\Application Data
CLIENTNAME=XXX
ClusterLog=C:\WINDOWS\Cluster\cluster.log
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=YYY
ComSpec=C:\WINDOWS\system32\cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=\Documents and Settings\hierkönnteihrnamestehen
LOGONSERVER=\\YYY
NUMBER_OF_PROCESSORS=2
OS=Windows_NT
Path=C:\Program Files\Windows Resource Kits\Tools\;C:\WINDOWS\system32;C:\WINDOW
S;C:\WINDOWS\System32\Wbem
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 15 Model 3 Stepping 4, GenuineIntel
PROCESSOR_LEVEL=15
PROCESSOR_REVISION=0304
ProgramFiles=C:\Program Files
PROMPT=$P$G
SESSIONNAME=RDP-Tcp#19
SystemDrive=C:
SystemRoot=C:\WINDOWS
TEMP=C:\DOCUME~1\CTI_AD~1\LOCALS~1\Temp\1
TMP=C:\DOCUME~1\CTI_AD~1\LOCALS~1\Temp\1
USERDOMAIN=YYY
USERNAME=hierkönnteihrnamestehen
USERPROFILE=C:\Documents and Settings\hierkönnteihrnamestehen
windir=C:\WINDOWS
ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\hierkönnteihrnamestehen\Application Data
CLIENTNAME=XXX
ClusterLog=C:\WINDOWS\Cluster\cluster.log
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=YYY
ComSpec=C:\WINDOWS\system32\cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=\Documents and Settings\hierkönnteihrnamestehen
LOGONSERVER=\\YYY
NUMBER_OF_PROCESSORS=2
OS=Windows_NT
Path=C:\Program Files\Windows Resource Kits\Tools\;C:\WINDOWS\system32;C:\WINDOW
S;C:\WINDOWS\System32\Wbem
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 15 Model 3 Stepping 4, GenuineIntel
PROCESSOR_LEVEL=15
PROCESSOR_REVISION=0304
ProgramFiles=C:\Program Files
PROMPT=$P$G
SESSIONNAME=RDP-Tcp#19
SystemDrive=C:
SystemRoot=C:\WINDOWS
TEMP=C:\DOCUME~1\CTI_AD~1\LOCALS~1\Temp\1
TMP=C:\DOCUME~1\CTI_AD~1\LOCALS~1\Temp\1
USERDOMAIN=YYY
USERNAME=hierkönnteihrnamestehen
USERPROFILE=C:\Documents and Settings\hierkönnteihrnamestehen
windir=C:\WINDOWS

Scheinbar irgendwas mit Userprofilen, kann ich mir nicht erklären?!?
Stimmen denn die von mir verwendeten Bezeichnungen %%f und der DO @FOR-Befehl mit dem &&tf danach?!?

Ich komm damit nicht klar und erflehe Deine gütige Hilfe!!!

Danke, LFS1993
Bitte warten ..
Mitglied: Biber
20.05.2009 um 15:28 Uhr
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:
01.
::--------- snipp chkChanged.cmd ---- 
02.
@echo off & setlocal 
03.
Set "Testing=BesserIsDas" 
04.
 
05.
If defined testing ( 
06.
   Set "ChangedOut=Con:" 
07.
   Set "notChangedOut=Con:" 
08.
) ELSE ( 
09.
   Set "ChangedOut=D:\Changed.txt" 
10.
   Set "notChangedOut=D:\NotChanged.txt" 
11.
12.
for %%f in ("D:\temp\temp.txt") do echo set "time0=%%~tf" 
13.
for %%f in ("D:\temp\text.txt") do echo set "time1=%%~tf" 
14.
for %%f in ("D:\temp\temp.txt") do set "time0=%%~tf" 
15.
for %%f in ("D:\temp\text.txt") do set "time1=%%~tf" 
16.
 
17.
if "%time0%"=="%time1%" (  
18.
       echo Alles unverändert. >%notChangedOut% 
19.
 ) else (  
20.
echo Es ist eine Änderung erfolgt t0[%time0%] t1[%time1%]!!!! >%changedOut% 
21.
22.
::----- 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
Bitte warten ..
Mitglied: LFS1993
20.05.2009 um 16:07 Uhr
Biber, Hut ab!!!!!

Genau so etwas hab ich gesucht!
Und nachdem Du die richtige Lösung aufgezeigt hats, konnte ich die sogar reibungslos an meine Bedürfnisse anpassen, es läuft wie geschmiert!!!

Ich danke aufs allerherzlichste und bin wieder was schuldig!!
Solltest Du mal in der südlichen Region Deutschlands sein, wär es mir ein großes Vergnügen, Dich auf nen Drink einzuladen!

Gruß, LFS1993
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
Abfrage ob Datei von heute da ist (15)

Frage von pbelcl zum Thema Batch & Shell ...

VB for Applications
gelöst Abfrage, ob Datei mit Variablem Wert existiert (12)

Frage von Anrion zum Thema VB for Applications ...

Batch & Shell
Ungewöhnliche Txt.Datei-Abfrage mit Batch (3)

Frage von DaTobsn zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Router & Routing
gelöst Empfehlung günstiges ADSL2+ nur Modem (10)

Frage von TimMayer zum Thema Router & Routing ...

Server-Hardware
Lenovo Server System X 3650 M5 Festplatten (9)

Frage von Hendrik2586 zum Thema Server-Hardware ...