webbi
Goto Top

Datum - Uhrzeit einer Datei liegt x Zeit zurück

Hallo

Ich möchte ein Script erstellen, was alle 10 Minuten nachschaut, ob eine Datei in einem Ordner ist, die älter als XX Minuten schon im Ordner ist.

Quasi eine eMail-Benachrichtigung:

Hallo

Im Ordner ABC sind X Dateien vorhanden, die schon länger als Y Minuten da sind.

Hier ist die Dateiliste:
1. Name, Datum, Uhrzeit
2. Name, Datum, Uhrzeit
3. Name, Datum, Uhrzeit
...

Bitte Informieren Sie die ensprechenden Personen.

MfG

Webbi

Den Inhalt der Datei will ich gar nicht wissen, da diese teilweise die Seiten "sprengen" würden.

Die Zeit müsste im Script eine Variable sein, da ich noch nicht genau weiss, wie wir mit der Zeit hinkommen.

Hier mal ein älteres Script (mit Eurer Hilfe) - Vielleicht kann man das ja gebrauchen:
@echo off & setlocal
Set "Quell=C:\Inetpub\ftproot\ORDNER\OUT\"  

Set message=FI-FEHLER am %date% um %time% entdeckt
Set "HINWEISTEXT02=Hallo"  
Set "HINWEISTEXT03=Die Datein im OUT-Ordner gehen wieder nicht in SAP"  
Set "HINWEISTEXT04="  
Set "HINWEISTEXT05="  
Set "HINWEISTEXT06="  
Set "HINWEISTEXT07="  
Set "HINWEISTEXT08="  
Set "HINWEISTEXT09=MfG Webbi"  
Set "HINWEISTEXT10=--------------------------"  
set /a Anzahl=0
Set "change=INSERT"  
set "bodytemp=%Quell%bodytemp.txt"  
set "body=%Quell%body.txt"  
if exist "%bodytemp%" del "%bodytemp%"  
for /f "delims=" %%i in ('dir /b /od "%Quell%FI_*.*"') do call :ProcessLine "%Quell%%%i"  
echo Es sind wieder Dateien da, die nicht in SAP rübergehen: %Anzahl% !>"%body%"  
echo.>>"%body%"  
type "%bodytemp%">>"%body%"  
echo.>>"%body%"  
echo %hinweistext02%>>"%body%"  
echo %hinweistext09%>>"%body%"  
if NOT "%Anzahl%"=="0" c:\batch\Blat\blat.exe "%body%" -to EMAIL -server SERVER -subject "%message%"  

del "%bodytemp%"  
del "%body%"  
goto :eof
:ProcessLine
for /f "delims=" %%i in ('type %1') do set zeichen=%%i & echo ausgelesen [%%i]  

set /a Anzahl+=1
goto :eof

Content-Key: 73050

Url: https://administrator.de/contentid/73050

Printed on: April 18, 2024 at 11:04 o'clock

Member: bastla
bastla Nov 08, 2007 at 11:04:37 (UTC)
Goto Top
Hallo Webbi1976!

Falls Du auch externe Tools einsetzen kannst, wäre Horst Schaeffer's "WasFile" zu empfehlen - eine Liste aller Dateien mit einem Änderungszeitpunkt von vor weniger als 10 Minuten erhältst Du zB mit folgender Eingabe (direkt an der Kommandozeile):
for %i in (D:\Test\*.*) do @C:\Tools\wasfile "%i" modified after now-10 && @echo %i, %~ti  

Grüße
bastla

P.S.: Für das Einbauen in den obigen Code habe ich im Moment leider keine Zeit.
Member: Webbi
Webbi Nov 08, 2007 at 15:15:34 (UTC)
Goto Top
Hallo

Erst einmal vielen Dank für die Hilfe.

Komme leider nicht weiter. Habe das schon in verschiedene Zeilen versucht einzubringen.
Leider ohne Erfolg.

Vielleicht hat da noch jemand eine Idee.

Webbi
Member: bastla
bastla Nov 08, 2007 at 16:11:06 (UTC)
Goto Top
Hallo Webbi1976!

Ungetesteter Entwurf:
@echo off & setlocal
Set "Quell=C:\Inetpub\ftproot\ORDNER\OUT\"  
Set Min=10

set "bodytemp=%temp%\bodytemp.txt"  
set "body=%temp%\body.txt"  

if exist "%bodytemp%" del "%bodytemp%"  
for %%i in ("%Quell%*.*") do C:\batch\wasfile\wasfile.exe "%%i" modified before now-%Min% && @echo %%i, %%~ti >>"%bodytemp%"  
if not exist "%bodytemp%" goto :eof  

set "message=Alte Dateien (%date% um %time%)"  

for /f "delims=:" %%i in ('findstr /n . "%bodytemp%"') do set Anzahl=%%i  
if not defined Anzahl goto :eof

echo Hallo>"%body%"  
echo.>>"%body%"  
echo Der Ordner %Quell% enthaelt %Anzahl% Datei(en) mit einem Alter von mehr als %Min% Minuten:>>"%body%"  
echo.>>"%body%"  
findstr /n . "%bodytemp%">>"%body%"  
echo.>>"%body%"  
echo.>>"%body%"  
echo MfG Webbi>>"%body%"  

c:\batch\Blat\blat.exe "%body%" -to EMAIL -server SERVER -subject "%message%"  

del "%bodytemp%"  
del "%body%"  
Bitte auch den Pfad "C:\batch\wasfile\wasfile.exe" anpassen ...

Grüße
bastla
Member: Biber
Biber Nov 08, 2007 at 18:16:58 (UTC)
Goto Top
Moin Webbi,

falls Du den Einsatz der WasFile.exe scheuen solltest, ersetze den WasFile-Aufruf wie folgt

STATT der einen Zeile:
for %%i in ("%Quell%*.*") do C:\batch\wasfile\wasfile.exe "%%i" modified before now-%Min% && @echo %%i, %%~ti >>"%bodytemp%"  

SETZE zwei hausgemachte mit temporärem VBS an dieselbe Stelle im Source:
echo Wscript.Quit ^(DateDiff^("N", WScript.Arguments^(0^), Now^) ^< %Min%^) >%temp%\ddMin.vbs  
for %%i in ("%Quell%*.*") do cscript //nologo %temp%\DDmin.vbs "%%~ti" && @echo  %%i, %%~ti >>"%bodytemp%"  

Macht sonst keinen Unterschied (denke ich).

Die eine Zeile VBS gibt einen ERRORLEVEL-Wert von 0 zurück, falls die auf 10-Minuten-oder-weniger-alt geprüfte Datei ÄLTER ist als 10 Minuten.
Nur in diesem Fall wird eine neue Zeile in Deine Mini-Log-Datei geschrieben.

Grüße Biber
Member: bastla
bastla Nov 08, 2007 at 18:27:30 (UTC)
Goto Top
@Biber

VBS - darauf hätte ich eigentlich auch kommen können ... face-wink

Grüße
bastla
Member: Webbi
Webbi Nov 12, 2007 at 07:23:13 (UTC)
Goto Top
Hallo Biber, Hallo bastla

Mal wieder perfekt gelaufen.

Ich danke Euch - damit habt Ihr mir viel Arbeit bzw. Zeit erspart.

Herzlichen Dank noch einmal.

Webbi1976

PS: Dieser Beitrag gilt als gelöst! face-smile