Batch für Serverabfrage von geänderten Dateien, Auslesen Änderungsdatum von Dateien
Mein Anliegen für nen batch-file ist ein bisschen mehr...
Ich benötige ein Batch-File zur Abfrage von Dateien in einer Ordnerstruktur auf einem Server. Der bat-file selbst soll aber nicht auf dem Server liegen, der abgefragt werden soll. Hierfür soll ein Account für den Serverzugriff mitgegeben werden.
Genauer:
Auf abzufragendem Server liegen Ordner (inkl. Unterordner). In diesen Ordnern befinden sich Backup-Dateien, die auf ihre Aktualität überpürft werden sollen.
Wenn die Dateien (alle verfügbaren Dateien in den Ordnern/Unterordner älter als x Tage sind, sollen diese Dateien in ein log-file geschrieben werden und dieser dann per Email an eine bestimmte Person (Systemadministrator verschickt werden). Wenn die Dateien aber jünger als x Tage sind, soll keine Benachrichtigung erfolgen.
So könnte die Routine aussehen:
- Authentifizierung auf Server, um Ordner/Unterordner nach Dateien inklusive ihres Änderungsdatums zu überprüfen (Überprüfung evtl mit WasFile.exe)
- wenn Änderungsdatum jeder einzelnen Datei in Ordner mehr als x Tage zurückliegt, Datei in log-file schreiben, ansonsten keine Information
- log-file über SMTP-Server an verschiedene Empfänger verschicken (schon realisiert über smtpmail.exe)
Wäre echt toll, wenn jemand einen Lösungsvorschlag, vorallem für die Authenifizierung und die Abfrage der Dateien in Ordnerstrukur auf dem Server hat und für die Überprüfung des Änderungsdatums. Am besten wäre es natürlich, wenn in dem log-file alle Dateien enthalten sind, die älter als x Tage sind, und dahinter aufgelistet wird, wann sie denn zum letzten mal geändert wurden.
z.b.
file1.exe zuletzt geändert am 12.06.08
file2.stc zuletzt geändert am 08.02.07
Danke schon mal im Vorraus für eure Ansätze...
Mfg painkillerpro
Ich benötige ein Batch-File zur Abfrage von Dateien in einer Ordnerstruktur auf einem Server. Der bat-file selbst soll aber nicht auf dem Server liegen, der abgefragt werden soll. Hierfür soll ein Account für den Serverzugriff mitgegeben werden.
Genauer:
Auf abzufragendem Server liegen Ordner (inkl. Unterordner). In diesen Ordnern befinden sich Backup-Dateien, die auf ihre Aktualität überpürft werden sollen.
Wenn die Dateien (alle verfügbaren Dateien in den Ordnern/Unterordner älter als x Tage sind, sollen diese Dateien in ein log-file geschrieben werden und dieser dann per Email an eine bestimmte Person (Systemadministrator verschickt werden). Wenn die Dateien aber jünger als x Tage sind, soll keine Benachrichtigung erfolgen.
So könnte die Routine aussehen:
- Authentifizierung auf Server, um Ordner/Unterordner nach Dateien inklusive ihres Änderungsdatums zu überprüfen (Überprüfung evtl mit WasFile.exe)
- wenn Änderungsdatum jeder einzelnen Datei in Ordner mehr als x Tage zurückliegt, Datei in log-file schreiben, ansonsten keine Information
- log-file über SMTP-Server an verschiedene Empfänger verschicken (schon realisiert über smtpmail.exe)
Wäre echt toll, wenn jemand einen Lösungsvorschlag, vorallem für die Authenifizierung und die Abfrage der Dateien in Ordnerstrukur auf dem Server hat und für die Überprüfung des Änderungsdatums. Am besten wäre es natürlich, wenn in dem log-file alle Dateien enthalten sind, die älter als x Tage sind, und dahinter aufgelistet wird, wann sie denn zum letzten mal geändert wurden.
z.b.
file1.exe zuletzt geändert am 12.06.08
file2.stc zuletzt geändert am 08.02.07
Danke schon mal im Vorraus für eure Ansätze...
Mfg painkillerpro
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 92170
Url: https://administrator.de/contentid/92170
Ausgedruckt am: 25.11.2024 um 20:11 Uhr
8 Kommentare
Neuester Kommentar
Hi,
Authentifikation ist nicht schlimm:
net use \\<servername>\ipc$ <klartextpasswort> /user:<domäne>\<username>
Die jeweiligen Sachen sind einfach passend zu ersetzen - das natürlich ohne < und > . Wenn es eine Freigabe gibt, auf die man sich authentifizieren kann, dann heisst das eben
net use \\<servername>\<freigabe> <klartextpasswort> /user:<domäne>\<username>
Achtung beim Testen: es kann nur einmal eine Anmeldung in einem Benutzerkontext auf die Ressource gemacht werden - schaust Du also zuerst mal mit dem Explorer nach, was so abgeht, dann funktioniert das net use nicht mehr. Dann hilft
net use \\<server>\<freigabe> /delete
Für die Dateisuche gibt es das Kommando find - damit kann man schon mal eine Menge machen. Manchmal reicht das nicht und da gibt es auf sourceforge.net die UnixUtils - das sind nativ portierte Unixkommandos. Eins davon ist auch find und da kannste mit -atime, -mtime und -ctime sowie einer Zahl dahinter sehr fein steuern, wie alt die Datei sein darf/soll.
Das geht dann etwas so:
find C:\ -ctime +3 > logfile.log 2> errorfile.log
-ctime +3 sagt: alle Dateien, deren Erstellungsdatum mehr als drei Tage her ist.
-citme -3 würde sagen: alle Dateien, deren Erstellungsdatum jünger als drei Tage ...
Mit dem Unix-find und der Option -exec könntest Du es mit ein wenig Überlegung auch schaffen, die entsprechenden Log-Dateien, die älter sind als n Tage, einfach löschen oder komprimieren oder was auch immer machen zu lassen....
Grüße Mathias
Authentifikation ist nicht schlimm:
net use \\<servername>\ipc$ <klartextpasswort> /user:<domäne>\<username>
Die jeweiligen Sachen sind einfach passend zu ersetzen - das natürlich ohne < und > . Wenn es eine Freigabe gibt, auf die man sich authentifizieren kann, dann heisst das eben
net use \\<servername>\<freigabe> <klartextpasswort> /user:<domäne>\<username>
Achtung beim Testen: es kann nur einmal eine Anmeldung in einem Benutzerkontext auf die Ressource gemacht werden - schaust Du also zuerst mal mit dem Explorer nach, was so abgeht, dann funktioniert das net use nicht mehr. Dann hilft
net use \\<server>\<freigabe> /delete
Für die Dateisuche gibt es das Kommando find - damit kann man schon mal eine Menge machen. Manchmal reicht das nicht und da gibt es auf sourceforge.net die UnixUtils - das sind nativ portierte Unixkommandos. Eins davon ist auch find und da kannste mit -atime, -mtime und -ctime sowie einer Zahl dahinter sehr fein steuern, wie alt die Datei sein darf/soll.
Das geht dann etwas so:
find C:\ -ctime +3 > logfile.log 2> errorfile.log
-ctime +3 sagt: alle Dateien, deren Erstellungsdatum mehr als drei Tage her ist.
-citme -3 würde sagen: alle Dateien, deren Erstellungsdatum jünger als drei Tage ...
Mit dem Unix-find und der Option -exec könntest Du es mit ein wenig Überlegung auch schaffen, die entsprechenden Log-Dateien, die älter sind als n Tage, einfach löschen oder komprimieren oder was auch immer machen zu lassen....
Grüße Mathias
Hi,
prima - ein Schritt weiter
Die UnixUtils findest Du unter http://unxutils.sourceforge.net/. Das ist ein ZIP-File, das kannste runterladen und dann das Programm find aus /usr/local/wbin herausextahieren.
In der Tat ist es auf Windows erstmal nicht vorhanden - die Tools sind native Ports von Linuxprogrammen und wie wir MS kennen ... naja.
'ne andere Idee - also hab ich jetzt erstmal nicht. Vielleicht kann man das mit dem Windows Find auch machen, doch da bin ich unsicher...
Grüße Mathias
prima - ein Schritt weiter
Die UnixUtils findest Du unter http://unxutils.sourceforge.net/. Das ist ein ZIP-File, das kannste runterladen und dann das Programm find aus /usr/local/wbin herausextahieren.
In der Tat ist es auf Windows erstmal nicht vorhanden - die Tools sind native Ports von Linuxprogrammen und wie wir MS kennen ... naja.
'ne andere Idee - also hab ich jetzt erstmal nicht. Vielleicht kann man das mit dem Windows Find auch machen, doch da bin ich unsicher...
Grüße Mathias
Hallo painkillerpro!
Eine eigene Variable zu verwenden wäre zwar auch möglich, aber eigentlich genügt auch die Laufvariable %%i der "for"-Schleife.
Falls Du auch Unterverzeichnisse mit erfassen möchtest, bräuchtest Du beim "dir" noch "/s" - dann enthielte übrigens %%i immer den vollen Pfad, und Du kämst mit "%%~nxi" zu Dateiname + Extension; wenn sich, wie in der aktuellen Version, das "dir" nur auf ein bestimmtes Verzeichnis bezieht, steht in %%i ohenhin kein Pfad.
Je nachdem, was Du noch alles vorhast, kannst Du entweder gleich alles in der Schleife selbst erledigen:
oder Du verwendest ein Unterprogramm:
Grüße
bastla
Eine eigene Variable zu verwenden wäre zwar auch möglich, aber eigentlich genügt auch die Laufvariable %%i der "for"-Schleife.
Falls Du auch Unterverzeichnisse mit erfassen möchtest, bräuchtest Du beim "dir" noch "/s" - dann enthielte übrigens %%i immer den vollen Pfad, und Du kämst mit "%%~nxi" zu Dateiname + Extension; wenn sich, wie in der aktuellen Version, das "dir" nur auf ein bestimmtes Verzeichnis bezieht, steht in %%i ohenhin kein Pfad.
Je nachdem, was Du noch alles vorhast, kannst Du entweder gleich alles in der Schleife selbst erledigen:
for /f "delims=" %%i in ('dir /b /a-d /od "%WORKDIR%\%tools%\*.*"') do "%WORKDIR%\%tools%\WasFile.exe" %Zieldatei% modified after today-%LastModified% >> backup.log && echo hier die Aktion für Errorlevel 0 für die Datei "%%i"
for /f "delims=" %%i in ('dir /b /a-d /od "%WORKDIR%\%tools%\*.*"') do call :ProcessFile "%%i"
echo Fertig.
goto :eof
:ProcessFile
:: Die beim Aufruf des Unterprogramms übergebene Datei ist hier %1
"%WORKDIR%\%tools%\WasFile.exe" "%WORKDIR%\%tools%\%~1" modified after today-%LastModified% >> backup.log
if not errorlevel 1 goto :TRUE >> backup.log
...
...
goto :eof
:TRUE
...
...
goto :eof
bastla
Hallo painkillerpro!
Oder gleich mit einem Zerlegungsbeispiel:
Was Du übrigens noch so alles mit der Schleifenvariable anstellen könntest, siehst Du am Ende der Online-Hilfe zu "for" (mit "for /?").
Grüße
bastla
jetzt müsste ich nur noch wissen, ob ich auch das letzte änderungsdatum direkt auslesen kann?
Auch dazu kannst Du auf %%i zurückgreifen:for /f "delims=" %%i in ('dir /b /a-d /od "%WORKDIR%\%tools%\*.*"') do echo %%~ti
for /f "delims=" %%i in ('dir /b /a-d /od "%WORKDIR%\%tools%\*.*"') do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do echo "%%i" zuletzt geaendert: %%c-%%b-%%a
Grüße
bastla