ghostx
Goto Top

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 (
)

if exist "%Log%" notepad "%Log%"


hoffe einer kann mir helfen

danke im vorraus

Content-Key: 153253

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

Ausgedruckt am: 29.03.2024 um 05:03 Uhr

Mitglied: 60730
60730 18.10.2010 um 11:04:02 Uhr
Goto Top
Moin,

Wenn du an einer Batch schraubst - ist das mit dem "@echo off" nicht wirklich sinnig.
Code Blöcke im Forum allerdings schon face-wink


set Datei= "C:\Testdatei.txt"  
dir %Datei%| find "%date%" && echo von heute||echo nicht von heute  
pause

Gruß
Mitglied: ghostX
ghostX 18.10.2010 um 11:38:50 Uhr
Goto Top
Hi TimoBeil,

danke für deine Antwort,

du hast mich aber glaub ich falsch verstanden. Dein Script überprüft die Datei auf das heutige Datum oder?

Es soll aber nach dem gestrigen Tag schauen (Datum - 1), also so ungefähr:

dir %Datei%| find "%date%"-1 && echo Datei aktuell
Else
Datei nicht aktuell


Ausserdem brauch ich das ganze in einer Logdatei, genauso wie in meinem Beispielcode
Mitglied: Biber
Biber 18.10.2010, aktualisiert am 18.10.2012 um 18:43:49 Uhr
Goto Top
Moin ghostX,

dazu haben wir im Bereich Batch & Shell schon ein paar Lösungen - eine steht hier Datum vom Vortag....


Grüße
Biber
Mitglied: 60730
60730 18.10.2010 um 12:07:28 Uhr
Goto Top
Moin,

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?


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
Mitglied: bastla
bastla 18.10.2010, aktualisiert am 18.10.2012 um 18:43:49 Uhr
Goto Top
@t-mo
war ja eh klar, das die Frage schon mal aufgetaucht und selbstverfreilich gelöst ist
... wenn nicht sogar mehrfach face-wink (wie zB auch da) ...

Grüße
bastla
Mitglied: ghostX
ghostX 18.10.2010 um 13:24:48 Uhr
Goto Top
Hallo,

@Biber:
Den Beitrag hab ich schon gelesen, aber ehrlichgesagt ist mir das alles zu hoch.

@timobeil:
Nein ich krieg es nicht alleine hin, sonst würde ich hier nicht fragen. Bin wirklich noch grün hinter den Ohren was Batch angeht.
Mitglied: bastla
bastla 18.10.2010 um 14:18:21 Uhr
Goto Top
Hallo ghostX!

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
)
Grüße
bastla

[Edit] Dateidatumsformat auf ersten Token - sollte "TT.MM.JJJJ" sein - reduziert [/Edit]
Mitglied: ghostX
ghostX 18.10.2010 um 14:44:48 Uhr
Goto Top
Hi Bastla,

danke für dein Hilfe.

das funktioniert aber leider nicht. Die Datei die ich überprüfe ist von gestern, also vom 17.10.10. Bei der müsste es sagen "aktuell", es sagt aber "nicht aktuell". Habe es auch mit einer Datei mit dem heutigen Datum und mit einem ganz alten Datum versucht. Es sagt immer "nicht aktuell"

Was ist eigentlich dieses "Gestern.vbs"? Muss ich da noch eine VB-Script Datei erstellen?
Mitglied: bastla
bastla 18.10.2010 um 14:54:04 Uhr
Goto Top
Hallo ghostX!

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]
Mitglied: 60730
60730 18.10.2010 um 14:56:20 Uhr
Goto Top
moin,

nix gegen Bastla, aber.....

01. @echo off face-wink

if "So, 17. 10 2010 00:43" == "Sonntag" (echo aktuell )  else (echo nicht aktuell ) nicht aktuell  
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.


@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ß
Mitglied: bastla
bastla 18.10.2010 um 15:10:34 Uhr
Goto Top
@t-mo
Über
if "So, 17. 10 2010 00:43" == "Sonntag" (echo aktuell )  else (echo nicht aktuell ) nicht aktuell  
bin ich dann aber doch sehr erstaunt ... face-wink

Grüße
bastla
Mitglied: 60730
60730 18.10.2010, aktualisiert am 18.10.2012 um 18:43:49 Uhr
Goto Top
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 face-wink

Anstatt einem "echten" >Vergleich lass ich den gekürzten String schreiben und suche dann nach "So"

So sollte das passen.

/edit

edit²
@bastla: face-wink passt schon, du darfst das face-wink

ich hab einfach mal ein Logfile von gestern verhackstückelt....

Zitat von @ghostX:
Es sagt immer "nicht aktuell"

Passt dann ja face-wink

Würd mich interessieren, was beim TO rauskommt...

Gruß
Mitglied: bastla
bastla 18.10.2010 um 16:20:09 Uhr
Goto Top
@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
@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  
Grüße
bastla
Mitglied: 60730
60730 18.10.2010 um 16:34:52 Uhr
Goto Top
Salü bastla,

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
Drcken Sie eine beliebige Taste . . . 

Gruß
Mitglied: ghostX
ghostX 18.10.2010 um 16:42:47 Uhr
Goto Top
Danke Leute! hat funktioniert. Ihr seit echt spitze!
Mitglied: bastla
bastla 18.10.2010 um 16:43:51 Uhr
Goto Top
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:
@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)
Grüße
bastla
Mitglied: Friemler
Friemler 18.10.2010 um 16:44:52 Uhr
Goto Top
Hallo Timo,

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 face-wink [/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...

@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
Mitglied: 60730
60730 18.10.2010 um 16:59:29 Uhr
Goto Top
Servus Friemler,

ähh das ist nicht mein Script face-wink da hab ich nur drin rumgepfuscht face-wink

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*

Dein 2. Ansatz sieht hybsch aus - läuft sogar bei meiner vergurksten Murke face-wink

Gruß
Mitglied: bastla
bastla 18.10.2010 um 17:11:07 Uhr
Goto Top
Hallo Friemler!
Da war der bastla wieder mal schneller..
Dafür gefällt mir aber von der Strategie her Dein Ansatz besser face-smile (nur die Datumsermittlung für die Datei würde ich sicherheitshalber trotzdem auch per VBS machen) ...

Grüße
bastla
Mehr von ghostXghostXUmbenennen mit PfadangabenghostX - 1 KommentarghostXErgebnis aus SQL-Abfrage auswertenghostX - 5 KommentareghostXXcopy funktioniert nichtghostX - 3 KommentareghostXSimple Batch-Datei soll Anzahl Dateien im Verzeichnis zählenghostX - 7 Kommentare
Heiß diskutiert
MysticFoxDEMicrosoft, Google und Amazon haben am 20.03.2024 diverse Cloud-Dienste in Russland eingestellt!MysticFoxDE - 66 KommentareMister001xFirewall Kaufberatung - Sophos, FortiGate, Palo Alto, Netgate, SecurepointMister001x - 39 KommentareLeonowVPN KaskadeLeonow - 25 KommentareKodaCHHardwareanschaffung für Firewall und ProxmoxKodaCH - 22 KommentareIshgaladProjekt, Netzwerktopologie, AufbauIshgalad - 19 KommentarerickstinsonYealink - Sommerzeit beginnt jetzt schonrickstinson - 18 KommentareMatt1893RAID 5 mit 2 "Foreign" PlattenMatt1893 - 17 KommentareMichele.StHomeway System kein Signal via 10 gbit ModulMichele.St - 17 KommentaregodlieWireguard Jumphost Split Tunnel Routingtroublesgodlie - 15 Kommentare0815ITSwitche kaskadieren bzw. hintereinander stecken0815IT - 15 KommentareNebellichtMicrosoft Teams stürzt ab !Nebellicht - 14 KommentareLegofrauWindows11 Home upgrade zu ProLegofrau - 14 Kommentare