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

Einzelne Dateien auf Veränderung überwachen

Frage Entwicklung Batch & Shell

(Level 1)

23.01.2007, aktualisiert 24.01.2007, 8681 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 ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Windows Server
gelöst Einzelne Dateien auf einem Server haben auf einmal keine Berechtigungen mehr (7)

Frage von StefanKittel zum Thema Windows Server ...

VB for Applications
gelöst Einzelne Dateien in Dateiliste umbenennen durch neuen Wert (Namen) aus einer Zelle (2)

Frage von two-ak-two zum Thema VB for Applications ...

Erkennung und -Abwehr
Überwachen welche Dateien auf USB Stick-Festplatte kopiert werden (4)

Frage von daniel.buchner77 zum Thema Erkennung und -Abwehr ...

Windows Server
gelöst GPO: Richtlinien überwachen auf Veränderung (2)

Frage von atk691 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

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

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...