Top-Themen

Aktuelle Themen (A bis Z)

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

Einzelne Dateien auf Veränderung überwachen

(Level 1)

23.01.2007, aktualisiert 24.01.2007, 10446 Aufrufe, 9 Kommentare

Normalerweise gibt es ja dafür genug Programme. Leider ist mein Rechner so gesichert, dass nichts installiert werden kann.

Also, ich arbeite in einem Netzwerk. Ich teile mir mehrere Exceltabellen mit mehreren Kollegen. Sobald der Mitarbeiter Daten in die Exceltabelle eingestellt hat, muss ich diese weiter verarbeiten. Ich möchte aber nicht andauernd nachschauen müssen, ob eine Veränderung z.B. das aktualisierungs Datum der Datei stattgefunden hat.

Falls Möglich, sollte eine Batch Datei alle paar Minuten prüfen, ob die Exceldatei geändert wurde und dann ein beliebigen Befehl ausführen.

Ich habe es mit meinen bescheidenen Kenntnissen zwar mit folgender Batch geschafft.
Mir gefällt aber daran nicht, dass jedesmal auf das Laufwerk zugegriffen wird.
Kann die Prüfung auch im Speicher (ohne File und ohne Laufwerk) stattfinden?

Für eine Änderung der Batch oder für eine neue Batch wäre ich dankbar.
Vielleicht gibt es aber auch schon eine fertige Batch?
Eine der zu prüfenden Dateien heißt entsörung.xls
System ist Win 2000


x:
cd X:\data

:beginn
dir X:\data\ent*.xls /tw/a > dergebnis.txt

copy findergebnis.txt findergebnis1.txt
findstr "entsörung.xls" dergebnis.txt >findergebnis.txt

echo N|comp findergebnis.txt findergebnis1.txt
IF ERRORLEVEL 1 ECHO Datei ist die alte
pause
IF NOT ERRORLEVEL 1 GOTO beginn
else start cmd.exe
Mitglied: bastla
23.01.2007 um 20:53 Uhr
Hallo Poke256 und willkommen im Forum!

Batch habe ich nicht anzubieten, aber vielleicht kannst Du ja folgende VBScript-Lösung verwenden:
01.
'CheckUpdated.vbs
02.
'Defaultwerte:
03.
sFile = "X:\Data\entsörung.xls"
04.
lInterv = 30000 '30 s
05.
 
06.
If WScript.Arguments.Count > 0 Then sFile = WScript.Arguments(0)
07.
If WScript.Arguments.Count > 1 Then lInterv = WScript.Arguments(1)
08.
MsgBox "Überwachung von " & sFile & vbCrLF & "gestartet, Intervall: " & lInterv / 1000 & " Sekunden"
09.
Set fso = CreateObject("Scripting.FileSystemObject")
10.
bRun = True
11.
sTimeStamp = fso.GetFile(sFile).DateLastModified
12.
Do While bRun
13.
	Do While fso.GetFile(sFile).DateLastModified = sTimeStamp
14.
		WScript.Sleep lInterv
15.
	Loop
16.
	sTimeStamp = fso.GetFile(sFile).DateLastModified
17.
	iRet = MsgBox("Datei " & sFile & " wurde geändert." , 65, sTimeStamp)
18.
	If iRet = vbCancel Then bRun = False
19.
Loop
20.
Msgbox "Überwachung von " & sFile & " beendet."
Gebrauchsanweisung:
Passe die Defaultwerte für zu überwachende Datei und Intervall (in ms) an und speichere das Script zB in "D:\Scripts\CheckUpdated.vbs".

Wenn Du das Script durch Doppelklick auf die Datei "CheckUpdated.vbs" startest, werden die eingetragenen Werte verwendet.

Alternativ dazu (etwa um parallel eine zweite Datei zu überwachen) kannst Du am CMD-Prompt eingeben:
01.
D:\Scripts\CheckUpdated.vbs "X:\Data\versörung.xls" 120000
In diesem Beispiel würde die Datei "X:\Data\versörung.xls" nur alle 2 Minuten (120 s) überprüft.

Eine weitere Startmöglichkeit wäre eine Verknüpfung, wobei die dargestellte Zeile als Ziel einzutragen wäre.

Wenn die Datei neu gespeichert wurde, erfährst Du dies (spätestens nach Ablauf des Intervalls von zB 2 Min) durch eine MessageBox (mit Hinweis auf den Dateinamen und das Speicherdatum samt -zeit). In dieser MessageBox hast Du jetzt die Möglichkeit, die Überwachung weiter durchführen zu lassen ("OK"), oder Du wählst "Abbrechen".

Zum Beenden der Überwachung ohne die angesprochene MessageBox musst Du den "wscript.exe"-Prozess beenden (Register "Prozesse" im Task-Manager - Aufruf über Str-Alt-Entf).

HTH
bastla
Bitte warten ..
Mitglied: Biber
23.01.2007 um 23:24 Uhr
Moin Poke256,

auch von mir ein Willkommen.

Ich war schon im Vorfeld ganz gespannt auf bastla's Lösung und wollte als ersten Satz schreiben:
"Eigentlich ist das nicht sinnvoll im Batch zu lösen, ich würde das mit VBS abfackeln und auf bastla warten."

Aber what shalls, zufällig habe ich ja gerade eine ähnliche Anforderung und ebenso zufällig auch meinen sportlichen Ehrgeiz...


Mein Szenario und meine Vorüberlegungen für eine Batch-Strategie:

Ich habe auf einem Serverlaufwerk Dokumentationen, die ich zusammen (aber räumlich getrennt) mit einem Kollegen bearbeite.
Diese Dateien werden sporadisch/unregelmäßig gepflegt, aber wenn es eine Änderung gibt, schaue ich es mir asap an.

Diese Dateien bei mir sind keine ".xls"-Dateien, sondern haben eine andere Extension.
Da ich den Batch variabel halten will, definiere ich (uns) eine %ext%-Variable.
Entsprechend auch eine für das Server-Share-Laufwerk (%share%).
Den aktuellsten Stand der Dateien speichere ich lokal (als gefilterten DIR-Output) in einem Pfad %compdir%.
Ähnlich wie Du, Poke256, nit Deiner Ergebnis.txt. Bei mir heißt die lastRead.txt.

Unterschied: ich starte meinen Schnipsel, nennen wir ihn CheckXLS.bat, dadurch, dass ich ihn ins Autostart-Verzeichnis lege.
Dann wird er morgens, wenn ich mich anmelde, gestartet. As is. Ohne Parameter.
Er tut, was ein Batch tun muss, und legt sich selbst bei dieser Gelegenheit nochmal für den Rest des Tages als AT-Job an.
Zu jeder folgenden (und der aktuellen) Stunde+30 Minuten.
Also, wenn ich mich morgens um 7:15 anmelde, lege ich mit dieser Zeile
01.
if [%1]==[] for /f "delims=:" %%i in ("%time%") do @for /L %%x in (%%i,1,23) do echo At %%x:30 /interactive "%~dspnx0 Noinit"
gleich für 7:30, 8:30, 9:30.....23:30 ein paar Jobs an, die diesen Batch dann aufrufen.
Falls Du nicht bis 23:30 unterwegs bist, solltest Du das "in (%%i,1,23)" ändern in "in (%%i,1,17)" oder so.

Und wenn der Batch eine Meldung abgefeuert hat, dann wird der aktuelle Stand auf dem %share%-Verzeichnis wieder als neue Grundlage genommen.
Sprich: in die Datei %compDir%\lastRead.txt geschrieben.
01.
::--------------snipp CheckXLS.bat--------Biber 2007
02.
@echo off & setlocal
03.
REM ==========Beginn von: Hier anpassen
04.
<b>Set "ext=xls" & Set compdir=d:\temp\comp
05.
Set "shared=\\xxServer00119\whatever\ABCD_Systeme\9 Teilprojekte\9.2 XX-Warehouse\ZZ-Integration\DB-Modell"</b>
06.
REM ========== Ende von Hier anpassen
07.
if not exist %compdir% md %compdir%
08.
if not exist %compdir%\lastread.txt dir "%shared%\*.%ext%"|find /i ".%ext%">%compdir%\lastread.txt
09.
for /f "tokens=1-3*" %%a in (%compdir%\lastread.txt) do @(
10.
     if exist "%shared%\%%~nxd" @for %%i in ("%shared%\%%~nxd") do @(
11.
          if "%%a %%b" NEQ "%%~ti" (
12.
               echo [%%d]-Datum ist anders.. [%%a %%b] ungleich [%%~ti]
13.
               pause
14.
               set MsgSent=jepp
15.
 )))
16.
REM Achtung: beim Aufruf OHNE Parameter geht der Batch in die folgende Zeile!!!! 
17.
if [%1]==[] for /f "delims=:" %%i in ("%time%") do @for /L %%x in (%%i,1,23) do <b>ECHO</b> At %%x:30 /interactive "%~dspnx0 Noinit"
18.
REM----------------- in der Zeile über dieser das <b>ECHO</b> entfernen zum AT-Jobs-Anlegen.
19.
if not defined MsgSent goto :eof
20.
 
21.
dir "%shared%\*.%ext%"|find /i ".%ext%">%compdir%\lastread.txt
[Flüchtig getestete Skizze]

Kernstück ist eigentlich die FOR-Anweisung, die den Vergleich macht.
Und zwar bei mir über alle Dateien in diesem %share%-Verzeichnis, nicht nur über eine.
Ist ja der gleiche Aufwand.
Alles andere ist nur Beiwerk.

Falls es KEIN AT-Job werden muss, sondern der Batch aus einem geöffneten CMD-Fenster gestartet wird:
Ersetze :
echo [%%d]-Datum ist anders.. [%%a %%b] ungleich [%%~ti]
-durch-
MSG %username% [%%d]-Datum ist anders.. [%%a %%b] ungleich [%%~ti]
- und streiche das "pause".

Und nochmal für Schnell-Leser und Copy&Paster:
So, wie der Schnipsel designed ist, legt er beim Aufgerufenwerden ohne Parameter ganz viele "Geplante Tasks" für den Rest des Tages an.

Also bitte beim Testen vom CMD-Prompt lieber x-beliebigen Parameter (z.b. "öalklklklklklkgüj") mitgeben.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
23.01.2007 um 23:53 Uhr
@Biber

Hattest Du überschüssige Vorschusslorbeeren?

An AT-Jobs hatte ich auch gedacht (um den schweren Schönheitsfehler hinsichtlich des Beendens zu vermeiden), aber da ich nicht wusste, wie dringend die Weiterverarbeitung (" ;... alle paar Minuten ...") sein würde, hab ich's vorläufig zurückgestellt (obwohl ja auch eine dreistellige Anzahl eigentlich kein Problem sein dürfte - oder?).

Im übrigen musste ich auch fast das Script im Hintergrund weiterlaufen lassen, damit ich durch die Zwischenspeicherung in einer Variablen dem Wunsch nach weniger Dateizugriffen Rechnung tragen konnte ...
@Poke256

Da Du eine Prüfung "im Speicher" angeregt hast: Habt Ihr eigentlich die Datei beide gleichzeitig geöffnet (arbeitet also mit "freigegebenen Arbeitsmappen"?

Grüße
bastla
Bitte warten ..
Mitglied: Biber
24.01.2007 um 00:24 Uhr
Na ja,

wo wir gerade von "kleinen Schönheitsfehlern" sprechen...

Ein Problem hab ich auch unter den Tisch gekehrt:
Wenn ich selber derjenige bin, der auf dem %Share% aktualisiert (und speichert)...
Dann bekomme ich auch diese Benachrichtigungen.

Würde sicherlich dazu führen, dass ich noch mal einen zweiten Oneliner schreiben muss, der alle AT-Jobs /DELETEd, die als gestartetes Programm diese CheckXls.bat haben.

Zum Thema "im-Speicher" statt mit Zwischendateien:
Das habe ich oben drin. Das ist nichts weiter als die direkte Auswertung des "Dir"-Befehls in einer FOR /F-Anweisung.

Zum Beispiel: Wenn ich die Dateien in zwei verschiedenen Verzeichnissen vergleichen wollte, könnte ich statt:
for /f "tokens=1-3*" %%a in (%compdir%\lastread.txt) do...
ja schreiben...
for /f "tokens=1-3*" %%a in ('dir W:\oAuchImmer\*.xls^|find /i ".xls"') do...

Die Zwischendatei lastread.txt macht ja nur Sinn, wenn und weil ein zeitlicher Prüf-Abstand von mehr als Hundertstel-Sekunden dazwischenliegt. Da halte ich eine stündliche Prüfung für ausreichend.
Wenn es dringlicher ist, dann würde ich ohnehin eine organisatorische Lösung erwägen:
- entweder der MA, der mit seiner Bearbeitung fertig ist, MUSS den nächsten per Mail informieren.
- oder in der Excel-Datei wird "Beim Speichern" automatisch eine Mail losgeschickt.

Gruß
Biber
Bitte warten ..
Mitglied: bastla
24.01.2007 um 00:27 Uhr
@Biber

Zum Thema "im-Speicher"
War ja nur Spass

Grüße
bastla
Bitte warten ..
Mitglied: Biber
24.01.2007 um 00:34 Uhr
War ja nur Spass
...leider eine der wenigen Dinge, die ich nicht per Batch prüfen kann...
Wenn Du da eine VBS-Lösung für mich hättest..?
Bitte warten ..
Mitglied: bastla
24.01.2007 um 00:42 Uhr
Jetzt hast Du mich auf dem falschen Fuß erwischt - mein "SpassFaktorBestimmungsAlgorithmus" ist mir irgendwie beim Portieren von Sinclair-Basic über PowerBasic nach VBS abhanden gekommen *schäm* - jetzt schätz' ich einfach ... (obwohl - Spass habe ich eigentlich eh immer schon sehr geschätzt ... )

Grüße
bastla
Bitte warten ..
Mitglied: bastla
24.01.2007 um 08:48 Uhr
Hallo Poke256!

Kann an diesen Code auch in ein Access VBA einfügen?
Grundsätzlich ja, aber nicht ohne Anpassungen im Detail - oder, anders formuliert, die Lösung lässt sich auch aus Office (VBA) heraus realisieren. Wenn Du allerdings VB-Script verwenden darfst, würde ich (trotz der etwas unorthodoxen Art der Beendigung per Task-Manager) bei dieser Variante bleiben.

Grüße
bastla
Bitte warten ..
Mitglied: SilentTom
18.07.2012 um 16:32 Uhr
Am Besten via Hashwert prüfen. Google mal nach "md5 file hasher". Das ist genau das was du suchst! Mit dem Programm kannst du alle XLS Dateien, egal ob neu erstellt, gelöscht oder geändert überwachen. Man muss halt den md5 file hasher installieren...
Bitte warten ..
Ähnliche Inhalte
Windows Server

Gruppenrichtlinienvererberung einzeln deaktivieren

gelöst Frage von xbast1xWindows Server4 Kommentare

Hallo zusammen, ich habe eine Haupt OU mit einer Sub OU. Die Sub OU bekommt die GPO von der ...

Schulung & Training

Ct einzeln als PDF?

gelöst Frage von honeybeeSchulung & Training2 Kommentare

Hallo, vielleicht bin ich einfach zu doof, aber gibt es die derzeit aktuelle c't nicht mehr als PDF? Ich ...

Microsoft Office

Excel Dateien durchsuchen und Werte einzeln in neue Excel Datei auslesen

Frage von krischaniiMicrosoft Office1 Kommentar

Hallo und Danke für Eure stets guten Antworten und Hilfen! Folgendes Problem habe ich: Win 8.1 - Office2013 Ich ...

Outlook & Mail

Kalendereinträge einzeln filtern und exportieren

Frage von GraudonOutlook & Mail4 Kommentare

Hallo zusammen, ich suche eine Möglichkeit, Kalendereinträge nach bestimmten Kriterien (z.B. Name, Kategorie, Url) zu filtern und dann in ...

Neue Wissensbeiträge
iOS
WatchChat für Whatsapp
Tipp von Criemo vor 2 TageniOS3 Kommentare

Ziemlich coole App für WhatsApp User in Verbindung mit der Apple Watch. Gibts für iOS sowohl als auch für ...

iOS
IOS hat nen Cursor !!!
Tipp von Criemo vor 3 TageniOS5 Kommentare

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Off Topic
Avengers 4: Endgame - Erster Trailer
Information von Frank vor 5 TagenOff Topic2 Kommentare

Ich weiß es ist Off Topic, aber ich freue mich auf diesen Film und vielleicht geht es anderen hier ...

Webbrowser
Microsoft bestätigt Edge mit Chromium-Kern
Information von Frank vor 5 TagenWebbrowser5 Kommentare

Microsoft hat nun in seinem Blog bestätigt, dass die nächste Edge Version kein EdgeHTML mehr für die Darstellung benutzen ...

Heiß diskutierte Inhalte
Hosting & Housing
VMware VM mit über 1TB RAM für S4HANA
gelöst Frage von Leo-leHosting & Housing24 Kommentare

Hallo zusammen, wer hat Erfahrng und kann mir einen Tipp zum sizing von S4HANA Systemen geben? Wir möchten, zunächst ...

LAN, WAN, Wireless
WLAN und Ausmessung - Eine Glaubensfrage?
Frage von ptr2brainLAN, WAN, Wireless23 Kommentare

Liebe Experten, als Sys-Admin habe ich mir schon öfter die Frage gestellt, ob es sich beim Thema WLAN und ...

Drucker und Scanner
SW-Laserdrucker mit sechs Papierfächern gesucht
Frage von MOS6581Drucker und Scanner19 Kommentare

Moin, zur Abwechslung mal eine sonderbare Anforderung :) Ich suche einen S/W Laserdrucker (kein MFP), der sechs Papierfächer bzw. ...

Virtualisierung
Gebrauchte Server Hardware als Virtualisierungs-"Spielwiese"?
Frage von NixVerstehenVirtualisierung19 Kommentare

Einen wunderschönen guten Morgen zusammen, ich möchte mich gerne etwas tiefer mit dem Thema Virtualisierung beschäftigen und dazu ein ...