Datei überprüfen ob Datum von gestern
Hallo Gemeinde,
habe ein kleines Problem. Möchte eine Datei überprüfen ob es das gestrige Datum hat. Wenn ja, ist alles ok, wenn nein, soll es mir ausgeben dass die Datei nicht aktuell ist, am besten in einer Logdatei.
Hatte schonmal sowas ähnliches gebaut, da ging es drum Dateien zu überprüfen ob sie das heutige datum haben oder nicht. Man müsste wahrscheinlich nur eine kleinigkeit umbauen aber bekomme es irgendwie nicht hin:
@echo off & setlocal
set Datei= "C:\Testdatei.txt"
set "Vergleich=%date%"
set "Log=C:\Test.log"
if exist "%Log%" del "%Log%"
echo>>"%Log%" %date%
for %%i in (%Datei%) do if exist %%i (
echo %%~ti|findstr /b "%Vergleich%">nul || echo >>"%Log%" Datei nicht aktuell: %%i
)
if exist "%Log%" notepad "%Log%"
hoffe einer kann mir helfen
danke im vorraus
habe ein kleines Problem. Möchte eine Datei überprüfen ob es das gestrige Datum hat. Wenn ja, ist alles ok, wenn nein, soll es mir ausgeben dass die Datei nicht aktuell ist, am besten in einer Logdatei.
Hatte schonmal sowas ähnliches gebaut, da ging es drum Dateien zu überprüfen ob sie das heutige datum haben oder nicht. Man müsste wahrscheinlich nur eine kleinigkeit umbauen aber bekomme es irgendwie nicht hin:
@echo off & setlocal
set Datei= "C:\Testdatei.txt"
set "Vergleich=%date%"
set "Log=C:\Test.log"
if exist "%Log%" del "%Log%"
echo>>"%Log%" %date%
for %%i in (%Datei%) do if exist %%i (
echo %%~ti|findstr /b "%Vergleich%">nul || echo >>"%Log%" Datei nicht aktuell: %%i
)
if exist "%Log%" notepad "%Log%"
hoffe einer kann mir helfen
danke im vorraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 153253
Url: https://administrator.de/forum/datei-ueberpruefen-ob-datum-von-gestern-153253.html
Ausgedruckt am: 17.07.2025 um 04:07 Uhr
19 Kommentare
Neuester Kommentar

Moin,
Wenn du an einer Batch schraubst - ist das mit dem "@echo off" nicht wirklich sinnig.
Code Blöcke im Forum allerdings schon
Gruß
Wenn du an einer Batch schraubst - ist das mit dem "@echo off" nicht wirklich sinnig.
Code Blöcke im Forum allerdings schon
set Datei= "C:\Testdatei.txt"
dir %Datei%| find "%date%" && echo von heute||echo nicht von heute
pause
Gruß
Moin ghostX,
dazu haben wir im Bereich Batch & Shell schon ein paar Lösungen - eine steht hier Datum vom Vortag....
Grüße
Biber
dazu haben wir im Bereich Batch & Shell schon ein paar Lösungen - eine steht hier Datum vom Vortag....
Grüße
Biber

Moin,
naja
Klar, kann man abfangen, wenn "heute" der 1. ist - gibts den 31. oder den 30. - aber das kann man (du?) doch auch lösen.
Ich wollte dir ja nur einen Tipp geben, das ganze Ding kriegst du doch auch alleine hin?
Das hab ich ehrlicherweise als "Testroutine" der Batch gesehen, auch das ist eher "produktiv" suboptimal -fürn Batchtest jedoch sinnig.
Gruß
edit war ja eh klar, das die Frage schon mal aufgetaucht und selbstverfreilich gelöst ist /edit
naja
- alles was nicht von heute ist - ist nicht aktuell
- heute und gestern ist heute und gestern einfach, aber wenn gestern der 30. oder der 31. war ist das schon wieder ach nööö
Klar, kann man abfangen, wenn "heute" der 1. ist - gibts den 31. oder den 30. - aber das kann man (du?) doch auch lösen.
if "%date:~-10,2%" == "01" goto erster
:something different
:erster
dir %Datei%|find "31" echo 31
dir %Datei%|find "30" echo 30
:somethingcompletlydifferent
Ausserdem brauch ich das ganze in einer Logdatei
Ich wollte dir ja nur einen Tipp geben, das ganze Ding kriegst du doch auch alleine hin?
dir %Datei%| find "%date%" && echo von heute>>logfile.txt ||echo nicht von heute>>logfile.txt
if exist "%Log%" notepad "%Log%"
Das hab ich ehrlicherweise als "Testroutine" der Batch gesehen, auch das ist eher "produktiv" suboptimal -fürn Batchtest jedoch sinnig.
Gruß
edit war ja eh klar, das die Frage schon mal aufgetaucht und selbstverfreilich gelöst ist /edit
@t-mo
(wie zB auch da) ...
Grüße
bastla
war ja eh klar, das die Frage schon mal aufgetaucht und selbstverfreilich gelöst ist
... wenn nicht sogar mehrfach Grüße
bastla
Hallo ghostX!
Na dann:
Grüße
bastla
[Edit] Dateidatumsformat auf ersten Token - sollte "TT.MM.JJJJ" sein - reduziert [/Edit]
Na dann:
@echo off & setlocal
set "Datei=D:\Die Datei.txt"
set "G=%temp%\Gestern.vbs"
>%G% echo WScript.Echo DateAdd("d",-1,Date)
for /f %%i in ('cscript //nologo %G%') do set "Gestern=%%i"
for %%i in ("%Datei%") do for /f %%d in ("%%~ti") do if "%%d"=="%Gestern%" (
echo aktuell
) else (
echo nicht aktuell
)
bastla
[Edit] Dateidatumsformat auf ersten Token - sollte "TT.MM.JJJJ" sein - reduziert [/Edit]
Hallo ghostX!
Dann solltest Du T-Mos Rat von ganz oben befolgen (oder zumindest per "
Grüße
bastla
[Edit] Hab's schon oben nachgebessert [/Edit]
Dann solltest Du T-Mos Rat von ganz oben befolgen (oder zumindest per "
echo %%~ti %Gestern%
" die zu vergleichenden Datumswerte anzeigen lassen ...Was ist eigentlich dieses "Gestern.vbs"? Muss ich da noch eine VB-Script Datei erstellen?
Der Batch erzeugt die Datei selbst.Grüße
bastla
[Edit] Hab's schon oben nachgebessert [/Edit]

moin,
nix gegen Bastla, aber.....
kann ja nicht - und ohne echo off würde man das auch erkennen....
Warum, dazu hat der Biber ein "das" Tutorial geschrieben, nicht jeder aht die gleichen Datumsformate auf seiner Kiste.
Gruß
nix gegen Bastla, aber.....
01. @echo off 
if "So, 17. 10 2010 00:43" == "Sonntag" (echo aktuell ) else (echo nicht aktuell ) nicht aktuell
Warum, dazu hat der Biber ein "das" Tutorial geschrieben, nicht jeder aht die gleichen Datumsformate auf seiner Kiste.
@setlocal
set "Datei=D:\Die Datei.txt"
set "G=%temp%\Gestern.vbs"
>%G% echo WScript.Echo DateAdd("d",-1,Date)
for /f %%i in ('cscript //nologo %G%') do set "Gestern=%%i"
set "Gestern=%Gestern:~-50,2%"
for %%i in ("%Datei%") do echo "%%~ti" |find "%Gestern%" (
echo aktuell
) else (
echo nicht aktuell
)
pause
Gruß

edit:
Warum, dazu hat der Biber ein "das" Tutorial geschrieben, nicht jeder aht die gleichen Datumsformate auf seiner Kiste.
Ich hab einfach mal Bastlas Weg "verhunzt"
Bei mir - und so kann es auch bei dir sein - wird einmal "Sonntag" und einmal "So, Tag. Monat Jahr DateiHH:Datei:MM" angegeben.
Aus "Laune" hab ich jetzt einfach bei diesem langen Strang die ersten beiden Buchstaben bei der 50. angefangen genommen, das (50 Stellen) sollte reichen
Anstatt einem "echten" >Vergleich lass ich den gekürzten String schreiben und suche dann nach "So"
So sollte das passen.
/edit
edit²
@bastla:
passt schon, du darfst das 
ich hab einfach mal ein Logfile von gestern verhackstückelt....
Passt dann ja
Würd mich interessieren, was beim TO rauskommt...
Gruß
Warum, dazu hat der Biber ein "das" Tutorial geschrieben, nicht jeder aht die gleichen Datumsformate auf seiner Kiste.
Ich hab einfach mal Bastlas Weg "verhunzt"
Bei mir - und so kann es auch bei dir sein - wird einmal "Sonntag" und einmal "So, Tag. Monat Jahr DateiHH:Datei:MM" angegeben.
Aus "Laune" hab ich jetzt einfach bei diesem langen Strang die ersten beiden Buchstaben bei der 50. angefangen genommen, das (50 Stellen) sollte reichen
Anstatt einem "echten" >Vergleich lass ich den gekürzten String schreiben und suche dann nach "So"
So sollte das passen.
/edit
edit²
@bastla:
ich hab einfach mal ein Logfile von gestern verhackstückelt....
Passt dann ja
Würd mich interessieren, was beim TO rauskommt...
Gruß
@t-mo
Bei Dir liefert das VBScript tatsächlich nur "Sonntag" als Ergebnis? *noch immer verwundert*
(Die Leerzeichen zwischen Tag und Monat sind aber nicht echt?)
Dann bleibt ja fast nur noch
Grüße
bastla
Bei Dir liefert das VBScript tatsächlich nur "Sonntag" als Ergebnis? *noch immer verwundert*
(Die Leerzeichen zwischen Tag und Monat sind aber nicht echt?)
Dann bleibt ja fast nur noch
@echo on & setlocal
set "Datei=D:\Die Datei.txt"
set "G=%temp%\Gestern.vbs"
>%G% echo WScript.Echo Left(FormatDateTime(DateAdd("d",-1,Date),vbShortDate),6)
for /f %%i in ('cscript //nologo %G%') do set "Gestern=%%i"
for %%i in ("%Datei%") do echo %%~ti|findstr "%Gestern%">nul && echo aktuell || echo nicht aktuell
bastla

Salü bastla,
Jein
Dein vbs liefert: edit - logischwerweise mal ohne //nologo laufen lassen /edit
Hab mal ein Pause an dein Script gekleistert und den da:
Gruß
Jein
Dein vbs liefert: edit - logischwerweise mal ohne //nologo laufen lassen /edit
---------------------------
Windows Script Host
---------------------------
Sonntag, 17. 10 2010
---------------------------
OK
---------------------------
Hab mal ein Pause an dein Script gekleistert und den da:
C:\script\yesterday\bastla.cmd >C:\script\yesterday\bastla.txt
(n:\ ist mein Home) laufen lassen:N:\>set "Datei=C:\script\yesterday\fzs-2010-10-17.log"
N:\>set "G=C:\DOKUME~1\Timo.~1\LOKALE~1\Temp\Gestern.vbs"
N:\>echo WScript.Echo DateAdd("d",-1,Date) 1>C:\DOKUME~1\Timo.~1\LOKALE~1\Temp\Gestern.vbs
N:\>for /F %i in ('cscript //nologo C:\DOKUME~1\Timo.~1\LOKALE~1\Temp\Gestern.vbs') do set "Gestern=%i"
N:\>set "Gestern=Sonntag,"
N:\>for %i in ("C:\script\yesterday\fzs-2010-10-17.log") do for /F %d in ("%~ti") do if "%d" == "Sonntag," (echo aktuell ) else (echo nicht aktuell )
N:\>for /F %d in ("So, 17. 10 2010 00:43") do if "%d" == "Sonntag," (echo aktuell ) else (echo nicht aktuell )
N:\>if "So," == "Sonntag," (echo aktuell ) else (echo nicht aktuell )
nicht aktuell
N:\>pause
Drcken Sie eine beliebige Taste . . .
Gruß
Hallo T-Mo!
Hinsichtlich des VBS ist das Ergebnis klar, aber "17. 10 2010" sieht (wegen des einen Punktes) trotzdem ziemlich strange aus ...
Um aber mal auf die sichere Seite zu kommen:
Grüße
bastla
Hinsichtlich des VBS ist das Ergebnis klar, aber "17. 10 2010" sieht (wegen des einen Punktes) trotzdem ziemlich strange aus ...
Um aber mal auf die sichere Seite zu kommen:
@echo on & setlocal
set "Datei=D:\Die Datei.txt"
set "Tage=-1"
set "G=%temp%\Gestern.vbs"
>%G% echo WScript.Echo Abs(Int(CreateObject("Scripting.FileSystemObject").GetFile(WScript.Arguments(0)).DateLastModified)=DateAdd("d",WScript.Arguments(1),Date))
for /f %%i in ('cscript //nologo %G% "%Datei%" %Tage%') do set "VonGestern=%%i"
if %VonGestern%==1 (echo aktuell) else (echo nicht aktuell)
bastla
Hallo Timo,
wenn das Datumsformat des Systems auf TT.MM.JJJJ eingestellt ist, liefert Dein Skript öfter mal falsche Ergebnisse. Angenommen heute wäre der 12.10.2010, hätte die Variable Gestern bei obigem Datumsformat den Wert 11. Wenn dann in Zeile 9 eine Datei vom 20.11.2009 überprüft wird, wird 11 gefunden und "aktuell" ausgegeben, was ja nun nicht stimmt.
[Edit] Mal ganz davon abgesehen, das Du Dich beim Ändern von bastla's Skript in Zeile 9 sowieso verhaspelt hast
[/Edit]
Da CMD das Datum einer Datei in dem Format zurück liefert, was als Systemformat eingestellt ist, ist meine Idee nun, die Anzahl Tage zwischen heute und dem übergebenen Datum in VBScript ausrechnen zu lassen (mit DateDiff). Das am Dateidatum noch zusätzlich die Uhrzeit hängt, ist dabei egal.
Klar könnte man dann auch gleich die ganze Aufgabe in VBS realisieren...
[Edit]
Da war der bastla wieder mal schneller..
Gruß
Friemler
Zitat von @60730:
@setlocal
set "Datei=D:\Die Datei.txt"
set "G=%temp%\Gestern.vbs"
>%G% echo WScript.Echo DateAdd("d",-1,Date)
for /f %%i in ('cscript //nologo %G%') do set "Gestern=%%i"
set "Gestern=%Gestern:~-50,2%"
for %%i in ("%Datei%") do echo "%%~ti" |find "%Gestern%" (
echo aktuell
) else (
echo nicht aktuell
)
pause
wenn das Datumsformat des Systems auf TT.MM.JJJJ eingestellt ist, liefert Dein Skript öfter mal falsche Ergebnisse. Angenommen heute wäre der 12.10.2010, hätte die Variable Gestern bei obigem Datumsformat den Wert 11. Wenn dann in Zeile 9 eine Datei vom 20.11.2009 überprüft wird, wird 11 gefunden und "aktuell" ausgegeben, was ja nun nicht stimmt.
[Edit] Mal ganz davon abgesehen, das Du Dich beim Ändern von bastla's Skript in Zeile 9 sowieso verhaspelt hast
Da CMD das Datum einer Datei in dem Format zurück liefert, was als Systemformat eingestellt ist, ist meine Idee nun, die Anzahl Tage zwischen heute und dem übergebenen Datum in VBScript ausrechnen zu lassen (mit DateDiff). Das am Dateidatum noch zusätzlich die Uhrzeit hängt, ist dabei egal.
Klar könnte man dann auch gleich die ganze Aufgabe in VBS realisieren...
@echo off
setlocal
set "Datei=D:\Die Datei.txt"
set "VBSCode=%TEMP%\DateDiff.vbs"
for %%f in ("%Datei%") do set "FileDate=%%~tf"
> "%VBSCode%" echo Set listArgs=WScript.Arguments
>>"%VBSCode%" echo If listArgs.Count ^>^= 1 Then
>>"%VBSCode%" echo WScript.Echo DateDiff("d",listArgs(0),Date)
>>"%VBSCode%" echo Else
>>"%VBSCode%" echo WScript.Echo 0
>>"%VBSCode%" echo End If
for /f %%i in ('cscript //nologo "%VBSCode%" "%FileDate%"') do (
if %%i equ 1 (
echo aktuell
) else (
echo nicht aktuell
)
)
endlocal
[Edit]
Da war der bastla wieder mal schneller..
Gruß
Friemler

Servus Friemler,
ähh das ist nicht mein Script
da hab ich nur drin rumgepfuscht 
Wegen falschem Ergebnis, das siehst du fast richtig - ist aber viel schlimmer als angenommen:
Schau mal genauer hin:
@bastla:
Dein 2. Ansatz sieht hybsch aus - läuft sogar bei meiner vergurksten Murke
Gruß
ähh das ist nicht mein Script
Wegen falschem Ergebnis, das siehst du fast richtig - ist aber viel schlimmer als angenommen:
Schau mal genauer hin:
if "So," == "Sonntag," ....
@bastla:
N:\>echo %date%
Mo, 18. 10 2010
da hat wohl mal ein "Stranger" an meinem Rechner geschnippselt, wenn ich den erwische *lol*Mo, 18. 10 2010
Dein 2. Ansatz sieht hybsch aus - läuft sogar bei meiner vergurksten Murke
Gruß