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

Ältere Dateien aus Verzeichnis protokolieren

Frage Entwicklung Batch & Shell

Mitglied: JT-131

JT-131 (Level 1) - Jetzt verbinden

10.05.2013 um 12:19 Uhr, 1770 Aufrufe, 3 Kommentare

Hallo zusammen,

Ich bräuchte eure Hilfe für eine Batch/Script.

Es ist so, dass automatisiert Textdateien in einen Ordner laufen und nach kurzer Zeit von einem anderen Programm eingelesen werden und aus dem Ordner somit gelöscht werden. Es kommt manchmal dazu, dass diese Dateien einen Fehler enthalten und manuell eingelesen werden müssen.

Gibt es eine Möglichkeit diesen Ordner zu durchsuchen sodass mit alle Dateien die älter als 30 Minuten sind in einer Logdatei gespeichert werden bzw. besser wäre es noch direkt die Log Datei per Mail zu versenden.

Ich habe mir gedacht, dass es eventuell mit einer von den folgenden Vorgehensweisen möglich sein muss dies zu realisieren, allerdings will es mir nicht gelingen.

Möglichkeit 1:

>Mit dem Befehl "Dir >vorher.txt" die jetzigen Dateien in einer Textdatei zu speichern.
>ping localhost -n 3000 um zu warten bis die Dateien normalerweise abgearbeitet sein müsste.
>Jetzt wieder "Dir >nachher.txt" um den nachher Stand zu protokollieren.

Mit dem Befehl "fc vorher.txt nachher.txt >Compare.txt" vergleicht er mir die beiden Log-Dateien zwar, zeigt es mir aber so an, dass es unbrauchbar ist...

Möglichkeit 2:

Es wird der Zeitstempel der Datei (Erstelldatum) ausgelesen und mit einer vorher gespeicherten Zeit in einer variablen verglichen.
Ich weiß leider nicht wie ich das umsetzen kann.

Es wäre schön, wenn mir jemand hierbei helfen kann. Gibt es eventuell sogar fertige Programme um seine Ordner in dieser Hinsicht zu überprüfen?

Viele Grüße und danke im voraus für eure Hilfe oder Anregung!
JT
Mitglied: bastla
10.05.2013, aktualisiert um 13:13 Uhr
Hallo JT-131!

Zu der Thematik gibt es einige Threads - etwa Bedingung in Abhängigkeit vom Alter einer Datei oder Datum - Uhrzeit einer Datei liegt x Zeit zurück ...

Was das Versenden per Mail angeht ist Dein Stichwort zB "blat" (siehe etwa auch im zweiten verlinkten Beitrag)

Grüße
bastla
Bitte warten ..
Mitglied: Endoro
10.05.2013, aktualisiert um 15:36 Uhr
Hallo JT-131,

dieses Script spuckt dir die Minuten seit Erstellung für alle Files im aktuellen Ordner aus:
01.
@echo off &setlocal 
02.
set "fname=" 
03.
set "ftd=" 
04.
call:GetInternational 
05.
for /f "tokens=1-3*" %%a in ('dir /a-d /tc ^| findstr /b [0-9]') do set "ftd=%%a %%b"&set "fname=%%d"&call:process 
06.
goto:eof 
07.
 
08.
:process 
09.
rem Get file time: 
10.
set "fdate=%ftd:~0,10%" 
11.
set "ftime=%ftd:~11%%sTime%00%sDecimal%00" 
12.
 
13.
call :GetSecs "%fdate%" "%ftime%" fileSecs 
14.
call :GetSecs "%date%" "%time%" curSecs 
15.
set /a elapsed="(curSecs-fileSecs)/60" 
16.
echo %fname% ist %elapsed% Minuten alt. 
17.
goto :eof 
18.
 
19.
:GetInternational 
20.
:: Sets a bundle of variables by reading the registry settings 
21.
for /f "tokens=1,2*" %%a in ('reg query "HKCU\Control Panel\International"') do set "%%a=%%c" 
22.
goto :eof 
23.
 
24.
:GetSecs "dateIn" "timeIn" secondsOut 
25.
::  Output:  Seconds elapsed since 1th Jan. 1970 00:00:00 
26.
setlocal 
27.
set "dateIn=%~1" 
28.
for /f "tokens=2" %%i in ("%dateIn%") do set "dateIn=%%i" 
29.
for /f "tokens=1-3 delims=%sDate%" %%a in ("%dateIn%") do ( 
30.
  if %iDate%==0 set /a mm=100%%a%%100,dd=100%%b%%100,yy=10000%%c%%10000 
31.
  if %iDate%==1 set /a dd=100%%a%%100,mm=100%%b%%100,yy=10000%%c%%10000 
32.
  if %iDate%==2 set /a yy=10000%%a%%10000,mm=100%%b%%100,dd=100%%c%%100 
33.
34.
for /f "tokens=1-3 delims=%sTime%%sDecimal% " %%a in ("%~2") do ( 
35.
  set "hh=%%a" 
36.
  set "nn=%%b" 
37.
  set "ss=%%c" 
38.
39.
if 1%hh% lss 20 set hh=0%hh% 
40.
if /i "%nn:~2,1%" equ "p" if "%hh%" neq "12" (set "hh=1%hh%" &set /a hh-=88) 
41.
if /i "%nn:~2,1%" equ "a" if "%hh%" equ "12" set "hh=00" 
42.
if /i "%nn:~2,1%" geq "a" set "nn=%nn:~0,2%" 
43.
set /a hh=100%hh%%%100,nn=100%nn%%%100,ss=100%ss%%%100 
44.
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2,j=j/5+dd+y*365+y/4-y/100+y/400-2472633,j=j*86400+hh*3600+nn*60+ss 
45.
endlocal &set "%~3=%j%" 
46.
goto :eof 
47.
 
48.
endlocal
Gruss!
Bitte warten ..
Mitglied: JT-131
10.05.2013, aktualisiert um 16:10 Uhr
Hallo Endoro,

vielen Dank für dieses Script!
Ich habe es noch etwas angepasst und jetzt läuft es super.
Wer das Script auch benötigt muss nur die blat Dateien in %Quelle% ablegen und es funktioniert.

Danke auch an Bastla für den Tipp mit dem Blat!

Danke nochmals!

LG
JT


01.
@echo off &setlocal 
02.
goto:Start 
03.
:Anfang 
04.
Timeout /T 120 /NOBREAK 
05.
:Start 
06.
set Ziel=C:\Test\ 
07.
set Quelle=C:\Runtime\ 
08.
del %Quelle%\log.txt 
09.
cd %Ziel% 
10.
set "fname=" 
11.
set "ftd=" 
12.
set Mail=0 
13.
call:GetInternational 
14.
for /f "tokens=1-3*" %%a in ('dir /a-d /tc ^| findstr /b [0-9]') do set "ftd=%%a %%b"&set "fname=%%d"&call:process 
15.
goto:Mail 
16.
:Mail 
17.
if exist %Quelle%\Sperre.txt goto:Anfang Else goto:Mail1 
18.
rem Hier wird überprüft, ob bereits eine Mail zu diesem Fehler verschickt worden ist. Es muss nach einem Fehler manuell die Sperre.txt im %Quelle% Ordner gelöscht werden, ansonsten würdest du zugespammt werden. 
19.
:Mail1 
20.
cd %Quelle% 
21.
Blat -install Ordnerueberwachung Absender 
22.
Blat "C:\Runtime\log.txt" ^ 
23.
rem diese Datei mit alten Dateien wird als Nachricht an den Empfänger geschickt. 
24.
-to Empfänger -server xxx.xxx.xxx.xxx  
25.
echo Sperre %date% %time% >%Quelle%\Sperre.txt 
26.
rem Hier wird die Sperre erzeugt, nachdem die Mail versand wurde. 
27.
cd %Ziel% 
28.
goto:Anfang 
29.
 
30.
:process 
31.
rem Get file time: 
32.
set "fdate=%ftd:~0,10%" 
33.
set "ftime=%ftd:~11%%sTime%00%sDecimal%00" 
34.
 
35.
call :GetSecs "%fdate%" "%ftime%" fileSecs 
36.
call :GetSecs "%date%" "%time%" curSecs 
37.
set /a elapsed="(curSecs-fileSecs)/60" 
38.
echo %fname% ist %elapsed% Minuten alt. 
39.
if /I %elapsed% GEQ 10 call:Log 
40.
rem Die 10 Steht hier für 10 Minute alten Dateien 
41.
goto :eof 
42.
:Log 
43.
echo %fname% >>%Quelle%\log.txt 
44.
goto :eof 
45.
 
46.
:GetInternational 
47.
:: Sets a bundle of variables by reading the registry settings 
48.
for /f "tokens=1,2*" %%a in ('reg query "HKCU\Control Panel\International"') do set "%%a=%%c" 
49.
goto :eof 
50.
 
51.
:GetSecs "dateIn" "timeIn" secondsOut 
52.
::  Output:  Seconds elapsed since 1th Jan. 1970 00:00:00 
53.
setlocal 
54.
set "dateIn=%~1" 
55.
for /f "tokens=2" %%i in ("%dateIn%") do set "dateIn=%%i" 
56.
for /f "tokens=1-3 delims=%sDate%" %%a in ("%dateIn%") do ( 
57.
  if %iDate%==0 set /a mm=100%%a%%100,dd=100%%b%%100,yy=10000%%c%%10000 
58.
  if %iDate%==1 set /a dd=100%%a%%100,mm=100%%b%%100,yy=10000%%c%%10000 
59.
  if %iDate%==2 set /a yy=10000%%a%%10000,mm=100%%b%%100,dd=100%%c%%100 
60.
61.
for /f "tokens=1-3 delims=%sTime%%sDecimal% " %%a in ("%~2") do ( 
62.
  set "hh=%%a" 
63.
  set "nn=%%b" 
64.
  set "ss=%%c" 
65.
66.
if 1%hh% lss 20 set hh=0%hh% 
67.
if "%nn:~2,1%" equ "p" if "%hh%" neq "12" (set "hh=1%hh%" &set /a hh-=88) 
68.
if "%nn:~2,1%" equ "a" if "%hh%" equ "12" set "hh=00" 
69.
if "%nn:~2,1%" geq "a" set "nn=%nn:~0,2%" 
70.
set /a hh=100%hh%%%100,nn=100%nn%%%100,ss=100%ss%%%100 
71.
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2,j=j/5+dd+y*365+y/4-y/100+y/400-2472633,j=j*86400+hh*3600+nn*60+ss 
72.
endlocal &set "%~3=%j%" 
73.
goto :eof 
74.
endlocal
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 Powershell ältere Dateien löschen (6)

Frage von Cougar77 zum Thema Batch & Shell ...

Batch & Shell
gelöst Dateien in einem Verzeichnis mergen - rekursiv (10)

Frage von frad1980 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Änderungsdatum von Dateien vergleichen und ältere löschen (10)

Frage von 129528 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...