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

Batch für Serverabfrage von geänderten Dateien, Auslesen Änderungsdatum von Dateien

Frage Entwicklung Batch & Shell

Mitglied: painkillerpro

painkillerpro (Level 1) - Jetzt verbinden

16.07.2008, aktualisiert 21.07.2008, 10899 Aufrufe, 8 Kommentare

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...

Mit freundlichen Grüßen painkillerpro
Mitglied: Nailara
16.07.2008 um 13:33 Uhr
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
Bitte warten ..
Mitglied: painkillerpro
16.07.2008 um 14:37 Uhr
danke erstma...

das mit der freigabe hat geklappt.

jetzt musst du mir das nur mal mit den unixutils erklären, die sind ja bestimmt nicht standardmäßig auf nem windows2003 server implementiert??!!
gibt es vllt auch ne andere möglichkeit??
und wie bekomme ich das letzte änderungsdatum der datei in den log-file... bzw. wie kann ich das auslesen??

die log-files werden immer wieder neu erstellt, und ausgelesen und der inhalt über mail verschickt!!
mir geht es nur darum, dass die namen der dateien inkl. letztes änderungsdatum in den log-file kommen und auch alle unterverzeichnisse durchsucht werden...

danke erstma für eure hilfe...
Bitte warten ..
Mitglied: Nailara
16.07.2008 um 14:41 Uhr
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
Bitte warten ..
Mitglied: painkillerpro
16.07.2008 um 14:50 Uhr
wäre es denn möglich, alle dateien in ordner/unterordnern über ne for-schleife mit dem befehl "dir" auszulesen:

Für alle durchsuchten Dateien in Ordner/Unterverzeichnissen tue etwas??!! so in der art...

die realisierung über das alter einer datei kann ich auch über wasfile.exe realisieren, wüsste aber ni, wie die for-schleife und die aufzurufende prozudur/unterprogramm auszusehen hätten.

for /f "delims=" %%i in ('dir /b /a-d /od "%WORKDIR%\%tools%\*.*"') do set "Zieldatei=%WORKDIR%\%tools%\%%i"

"%WORKDIR%\%tools%\WasFile.exe" %Zieldatei% modified after today-%LastModified% >> backup.log
if not errorlevel 1 goto :TRUE >> backup.log

--> funktioniert aber ni...

die schleife soll eigentlich jede einzelne datei auslesen und den namen+endung (text.txt) in die variable "Zieldatei" schreiben. für diese variable wird dann über wasfile.exe das alter geprüft.
ich will eigentlich nur, dass die routine für jede einzelne gefundene datei durchläuft, aber keine ahnung wie das geht!! hhelft mir bitte...

ich hoffe es ist verständlich...

danke!!
Bitte warten ..
Mitglied: bastla
20.07.2008 um 19:41 Uhr
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:
01.
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"
oder Du verwendest ein Unterprogramm:
01.
for /f "delims=" %%i in ('dir /b /a-d /od "%WORKDIR%\%tools%\*.*"') do call :ProcessFile "%%i" 
02.
echo Fertig. 
03.
goto :eof 
04.
 
05.
:ProcessFile 
06.
:: Die beim Aufruf des Unterprogramms übergebene Datei ist hier %1 
07.
"%WORKDIR%\%tools%\WasFile.exe" "%WORKDIR%\%tools%\%~1" modified after today-%LastModified% >> backup.log 
08.
if not errorlevel 1 goto :TRUE >> backup.log 
09.
... 
10.
... 
11.
goto :eof 
12.
 
13.
:TRUE 
14.
... 
15.
... 
16.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: painkillerpro
20.07.2008 um 23:35 Uhr
danke... hat mir sehr geholfen...
funktioniert!!

jetzt müsste ich nur noch wissen, ob ich auch das letzte änderungsdatum direkt auslesen kann? jetzt prüfe ich ja nur, in welchem zeitraum zuletzt geändert wurde! is zwar auch n kriterium, wäre aber spitze, wenn ich das änderungsdatum auslesen könnte!! (evtl. funktioniert das auch über nen vbs-skript in dem batch-file, keine ahnung, wie das funktioniert??)

dankeschön

Mit freundlichen Grüßen painkillerpro
Bitte warten ..
Mitglied: bastla
20.07.2008 um 23:47 Uhr
Hallo painkillerpro!

jetzt müsste ich nur noch wissen, ob ich auch das letzte änderungsdatum direkt auslesen kann?
Auch dazu kannst Du auf %%i zurückgreifen:
01.
for /f "delims=" %%i in ('dir /b /a-d /od "%WORKDIR%\%tools%\*.*"') do echo %%~ti
Oder gleich mit einem Zerlegungsbeispiel:
01.
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
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
Bitte warten ..
Mitglied: painkillerpro
21.07.2008 um 00:38 Uhr
thanks!! werd ich morgen früh gleich ma ausprobieren!!
besten dank bastla!!
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst BATCH: Daten aus Textdatei auslesen und in neue Textdatei separieren (9)

Frage von Manuel1234 zum Thema Batch & Shell ...

Batch & Shell
Per Batch aktuell angemeldete User auslesen (1)

Frage von Peter32 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch die alle Dateien löscht die Älter als 3 Tage sind (5)

Frage von Azubine zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...