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

Datei überprüfen ob Datum von gestern

Frage Entwicklung Batch & Shell

Mitglied: ghostX

ghostX (Level 1) - Jetzt verbinden

18.10.2010, aktualisiert 18.10.2012, 5496 Aufrufe, 19 Kommentare

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
Mitglied: 60730
18.10.2010 um 11:04 Uhr
Moin,

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


01.
set Datei= "C:\Testdatei.txt" 
02.
dir %Datei%| find "%date%" && echo von heute||echo nicht von heute 
03.
pause
Gruß
Bitte warten ..
Mitglied: ghostX
18.10.2010 um 11:38 Uhr
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
Bitte warten ..
Mitglied: Biber
18.10.2010, aktualisiert 18.10.2012
Moin ghostX,

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


Grüße
Biber
Bitte warten ..
Mitglied: 60730
18.10.2010 um 12:07 Uhr
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.

01.
if "%date:~-10,2%" == "01" goto erster 
02.
 
03.
:something different 
04.
 
05.
:erster 
06.
dir %Datei%|find "31" echo 31 
07.
dir %Datei%|find "30" echo 30 
08.
 
09.
: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
Bitte warten ..
Mitglied: bastla
18.10.2010, aktualisiert 18.10.2012
@T-Mo
war ja eh klar, das die Frage schon mal aufgetaucht und selbstverfreilich gelöst ist
... wenn nicht sogar mehrfach (wie zB auch hier oder da) ...

Grüße
bastla
Bitte warten ..
Mitglied: ghostX
18.10.2010 um 13:24 Uhr
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.
Bitte warten ..
Mitglied: bastla
18.10.2010 um 14:18 Uhr
Hallo ghostX!

Na dann:
01.
@echo off & setlocal 
02.
set "Datei=D:\Die Datei.txt" 
03.
 
04.
set "G=%temp%\Gestern.vbs" 
05.
>%G% echo WScript.Echo DateAdd("d",-1,Date) 
06.
for /f %%i in ('cscript //nologo %G%') do set "Gestern=%%i" 
07.
 
08.
for %%i in ("%Datei%") do for /f %%d in ("%%~ti") do if "%%d"=="%Gestern%" ( 
09.
    echo aktuell 
10.
) else ( 
11.
    echo nicht aktuell 
12.
)
Grüße
bastla

[Edit] Dateidatumsformat auf ersten Token - sollte "TT.MM.JJJJ" sein - reduziert [/Edit]
Bitte warten ..
Mitglied: ghostX
18.10.2010 um 14:44 Uhr
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?
Bitte warten ..
Mitglied: bastla
18.10.2010 um 14:54 Uhr
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]
Bitte warten ..
Mitglied: 60730
18.10.2010 um 14:56 Uhr
moin,

nix gegen Bastla, aber.....

01. @echo off

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


01.
@setlocal 
02.
set "Datei=D:\Die Datei.txt"  
03.
 
04.
set "G=%temp%\Gestern.vbs" 
05.
>%G% echo WScript.Echo DateAdd("d",-1,Date) 
06.
for /f %%i in ('cscript //nologo %G%') do set "Gestern=%%i" 
07.
set "Gestern=%Gestern:~-50,2%" 
08.
 
09.
for %%i in ("%Datei%") do echo "%%~ti" |find "%Gestern%" ( 
10.
    echo aktuell 
11.
) else ( 
12.
    echo nicht aktuell 
13.
14.
 
15.
pause
Gruß
Bitte warten ..
Mitglied: bastla
18.10.2010 um 15:10 Uhr
@T-Mo
Über
01.
if "So, 17. 10 2010 00:43" == "Sonntag" (echo aktuell )  else (echo nicht aktuell ) nicht aktuell
bin ich dann aber doch sehr erstaunt ...

Grüße
bastla
Bitte warten ..
Mitglied: 60730
18.10.2010, aktualisiert 18.10.2012
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....

Zitat von ghostX:
Es sagt immer "nicht aktuell"

Passt dann ja

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

Gruß
Bitte warten ..
Mitglied: bastla
18.10.2010 um 16:20 Uhr
@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
01.
@echo on & setlocal 
02.
set "Datei=D:\Die Datei.txt" 
03.
 
04.
set "G=%temp%\Gestern.vbs" 
05.
>%G% echo WScript.Echo Left(FormatDateTime(DateAdd("d",-1,Date),vbShortDate),6) 
06.
for /f %%i in ('cscript //nologo %G%') do set "Gestern=%%i" 
07.
 
08.
for %%i in ("%Datei%") do echo %%~ti|findstr "%Gestern%">nul && echo aktuell || echo nicht aktuell
Grüße
bastla
Bitte warten ..
Mitglied: 60730
18.10.2010 um 16:34 Uhr
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ß
Bitte warten ..
Mitglied: ghostX
18.10.2010 um 16:42 Uhr
Danke Leute! hat funktioniert. Ihr seit echt spitze!
Bitte warten ..
Mitglied: bastla
18.10.2010 um 16:43 Uhr
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:
01.
@echo on & setlocal 
02.
set "Datei=D:\Die Datei.txt" 
03.
set "Tage=-1" 
04.
 
05.
set "G=%temp%\Gestern.vbs" 
06.
>%G% echo WScript.Echo Abs(Int(CreateObject("Scripting.FileSystemObject").GetFile(WScript.Arguments(0)).DateLastModified)=DateAdd("d",WScript.Arguments(1),Date)) 
07.
for /f %%i in ('cscript //nologo %G% "%Datei%" %Tage%') do set "VonGestern=%%i" 
08.
if %VonGestern%==1 (echo aktuell) else (echo nicht aktuell)
Grüße
bastla
Bitte warten ..
Mitglied: Friemler
18.10.2010 um 16:44 Uhr
Hallo Timo,

Zitat von 60730:
01.
@setlocal 
02.
set "Datei=D:\Die Datei.txt"  
03.
 
04.
set "G=%temp%\Gestern.vbs" 
05.
>%G% echo WScript.Echo DateAdd("d",-1,Date) 
06.
for /f %%i in ('cscript //nologo %G%') do set "Gestern=%%i" 
07.
set "Gestern=%Gestern:~-50,2%" 
08.
 
09.
for %%i in ("%Datei%") do echo "%%~ti" |find "%Gestern%" ( 
10.
    echo aktuell 
11.
) else ( 
12.
    echo nicht aktuell 
13.
14.
 
15.
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 [/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...

01.
@echo off 
02.
 
03.
setlocal 
04.
 
05.
set "Datei=D:\Die Datei.txt" 
06.
set "VBSCode=%TEMP%\DateDiff.vbs" 
07.
 
08.
for %%f in ("%Datei%") do set "FileDate=%%~tf" 
09.
 
10.
> "%VBSCode%" echo Set listArgs=WScript.Arguments 
11.
>>"%VBSCode%" echo If listArgs.Count ^>^= 1 Then 
12.
>>"%VBSCode%" echo   WScript.Echo DateDiff("d",listArgs(0),Date) 
13.
>>"%VBSCode%" echo Else 
14.
>>"%VBSCode%" echo   WScript.Echo 0 
15.
>>"%VBSCode%" echo End If 
16.
 
17.
for /f %%i in ('cscript //nologo "%VBSCode%" "%FileDate%"') do ( 
18.
  if %%i equ 1 ( 
19.
    echo aktuell 
20.
  ) else ( 
21.
    echo nicht aktuell 
22.
23.
24.
 
25.
endlocal
[Edit]
Da war der bastla wieder mal schneller..

Gruß
Friemler
Bitte warten ..
Mitglied: 60730
18.10.2010 um 16:59 Uhr
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:
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

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

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst In Html-Datei per Batchdatei das Datum und die Uhrzeit eintragen (2)

Frage von Hakiegold zum Thema Batch & Shell ...

VB for Applications
gelöst Mit VBA im Monatskalender Datum suchen - aus anderer Datei einfügen (6)

Frage von Otto1699 zum Thema VB for Applications ...

Batch & Shell
Datum in einer CSV datei in Tage umwandeln (13)

Frage von nolle99 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...