redolog
Goto Top

Batch an einem bestimmten Tag im Monat ausführen

Hallo zusammen,

Microsoft verteilt wie bekannt monatliche Updates (Patchday)
Bei uns werden diese nach Überprüfung auf TestServern am folgenden Sonntag nach dem zweiten Dienstag im Monat eingespielt (per WSUS).
Mein Ziel ist es, vor dieser Einspielung und dem danach folgenden Neustart bestimmte Dienste zu beenden.
Mittels dem AT-Befehl könnte ich jeden Tag eine Batch starten, die abfragt ob denn jetzt "ein Sonntag nach dem zweiten Dienstag im Monat ist" und dann vor der WSUS-Einspielung die entsprechenden Dienste beendet - doch wie stelle ich das fest, ob es dieser bestimmte Sonntag ist?

Würde mich über Anregungen und Beispiele sehr freuen.

Grüße an alle.

Content-Key: 107643

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

Printed on: April 19, 2024 at 10:04 o'clock

Mitglied: 45877
45877 Jan 30, 2009 at 15:52:54 (UTC)
Goto Top
über geplante tasks kannst du doch einrichten, dass die batch jeden 3 sonntag im monat (oder wann auch immer) einmal gestartet werden soll..
Member: miniversum
miniversum Jan 30, 2009 at 16:05:21 (UTC)
Goto Top
Oder wenns genauer sien soll:
Per geplantem task am zweiten dienstag im monat den AT befehl starten und damit die ausführung auf den aktuellen tag +% setzen. Da das die Monatsgrnze nie überschreiten wird kansn tdu dann sogar die Addition um 5 Tage in Batch erledigen.
Member: redolog
redolog Jan 30, 2009 at 16:10:20 (UTC)
Goto Top
nun ja, da hätte ich im Jahr 2009 bereits im Juni, September und Dezember ein Problem.

Es muß "der Sonntag" nach dem zweiten Dienstag sein!

Grüße .....
Member: bastla
bastla Jan 30, 2009 at 16:12:49 (UTC)
Goto Top
Hallo redolog und willkommen im Forum!

Da der in Frage kommende Sonntag zwischen dem 13. und 19. eines Monats liegen muss, ließe sich das in einem Batch etwa so kontrollieren:
@echo off & setlocal

set /a Tag=%date:~-10,2%
if %Tag% lss 13 goto :eof
if %Tag% gtr 19 goto :eof

set G=%temp%\GetWeekDay.vbs
>>%G% echo WScript.Echo WeekDayName(WeekDay(WScript.Arguments(0)),True)
for /f %%i in ('cscript //nologo %G% %date%') do set "WTag=%%i"  
if /i "%WTag%" neq "So" goto :eof  

echo Updates installieren ...
Grüße
bastla

[Edit] @miniversum: Zweifellos eleganter ... face-smile [/Edit]
Member: redolog
redolog Jan 30, 2009 at 21:21:05 (UTC)
Goto Top
sensationelle Lösungen - Besten Dank an bastla und miniversum !!!!

Problem gelöst ....
Member: Beatzler
Beatzler Jan 31, 2009 at 00:49:46 (UTC)
Goto Top
Hey,

hätte nochmals ne kleine Frage bei der ich unterstützung bräuchte.

Habe die SuFu benutzt und bin auf diesen Thread hier gestossen da ich etwas ähnliches durchführen möchte.

ich brauche ein skript innerhalb einer Batch welches vorm ausführen einer weiteren batch prüft wie spät es aktuell ist ( systemzeit %time% am besten ? )

Die Prüfung soll verhindern das täglich ( egal welcher Tag ) z.b. ab 22 Uhr bis 8 Uhr morgens die nachfolgende Batch datei nicht gestartet wird !

Also sinngemäß so:

Batch läuft...
bei bestimmter Aktion kommt Abfrage ob es zwischen 22 Uhr und 8 Uhr ist
Falls JA dann goto ende
Falls NEiN goto start und dann wird halt die Batch gestartet ....


Habe nun mit dem obigen Quelltext schon ein wenig rumprobiert doch ich bekomm es nicht so recht hin face-sad bei %time% kommt ja z.B. 22:43:22,44 raus ... wie frage ich das am besten ab ?


Bin für jeden Tipp sehr dankbar !

Mfg Beatzler
Member: miniversum
miniversum Jan 31, 2009 at 08:48:47 (UTC)
Goto Top
Das entsprechende zur oberen Lösung wäre dann so:
@echo off
set Stunde=%time:~0,2%
set /a Stunde=%Stunde: =%
if %Stunde% lss 8 goto :eof 
if %Stunde% gtr 22 goto :eof 

echo Starte die Batch
Member: bastla
bastla Jan 31, 2009 at 09:07:01 (UTC)
Goto Top
@miniversum
Wenn es ohnehin eine Zahl werden soll, stört das Leerzeichen vor einstelligen Stundenzahlen gar nicht und es genügt
set /a Stunde=%time:~,2%
Grüße
bastla
Member: Beatzler
Beatzler Jan 31, 2009 at 15:21:59 (UTC)
Goto Top
Hey,

super face-smile Vielen Dank funktioniert auch allerbest, so wie gewünscht!

Aber könntet ihr mir ggf. das ganze mal erläutern ? Ist soweit alles klar nur zeile 03 versteh ich nicht so ganz ..

set /a Stunde=%time:~,2%

wird hier die zweite stelle aus dem %time% befehl abgefragt? also z.B. 23:45:43,23 dann würde bei dieser Zeit die 3 von der 23 ausgewertet werden ??? wofür steht das ~, ?

Vielen Dank !
Member: miniversum
miniversum Jan 31, 2009 at 15:28:29 (UTC)
Goto Top
Es werden dieersten zwei zahlen, also die Stunden, "ausgeschnitten". Genaueres darüber findest du indem du in der Eingabeaufforderung
set /?
eingibst
Member: bastla
bastla Jan 31, 2009 at 15:28:56 (UTC)
Goto Top
Hallo beatzler!

Vorweg: Mit "set /?" kannst Du die Details in der Onlinehilfe nachlesen ...

set /a Stunde=%time:~,2%
wird hier die zweite stelle aus dem %time% befehl abgefragt?
Es werden die ersten beiden Stellen (vor dem Komma steht kein Offset, es werden also keine Stellen übersprungen) der Uhrzeit als numerischer Wert in der Variablen %Stunde% gespeichert.

Grüße
bastla
Member: Beatzler
Beatzler Feb 01, 2009 at 01:32:50 (UTC)
Goto Top
Hey,

ahh okay jaa das mit dem set /? hätte mir auch selber einfallen können :D

Vielen Dank nochmal an euch beide !!! Echt super !

Mfg Beatzler