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-ID: 107643

Url: https://administrator.de/forum/batch-an-einem-bestimmten-tag-im-monat-ausfuehren-107643.html

Ausgedruckt am: 23.04.2025 um 13:04 Uhr

45877
45877 30.01.2009 um 16:52:54 Uhr
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..
miniversum
miniversum 30.01.2009 um 17:05:21 Uhr
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.
redolog
redolog 30.01.2009 um 17:10:20 Uhr
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 .....
bastla
bastla 30.01.2009 um 17:12:49 Uhr
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]
redolog
redolog 30.01.2009 um 22:21:05 Uhr
Goto Top
sensationelle Lösungen - Besten Dank an bastla und miniversum !!!!

Problem gelöst ....
Beatzler
Beatzler 31.01.2009 um 01:49:46 Uhr
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
miniversum
miniversum 31.01.2009 um 09:48:47 Uhr
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
bastla
bastla 31.01.2009 um 10:07:01 Uhr
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
Beatzler
Beatzler 31.01.2009 um 16:21:59 Uhr
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 !
miniversum
miniversum 31.01.2009 um 16:28:29 Uhr
Goto Top
Es werden dieersten zwei zahlen, also die Stunden, "ausgeschnitten". Genaueres darüber findest du indem du in der Eingabeaufforderung
set /?
eingibst
bastla
bastla 31.01.2009 um 16:28:56 Uhr
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
Beatzler
Beatzler 01.02.2009 um 02:32:50 Uhr
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