Wochentag per Batch ermitteln
Moinz Leute,
jetzt quäle ich mich seit geraumer Zeit durch das "Umgang mit Datum und Zeit - Tut" und habe leider glaub ich nur noch Holzwolle im Kopf...
Sehe ich das richtig? Es lässt sich - wenn die Ausgabe von "date" nur das reine Datum beinhaltet (ohne Wochentag) nicht mal eben der Wochentag ermitteln?
Oder lässt sich das doch mit akzeptablen Aufwand machen?
Ich brauche den Wochentag (alternativ eine Tagesnummer) als Variable...
Thx Fugu
jetzt quäle ich mich seit geraumer Zeit durch das "Umgang mit Datum und Zeit - Tut" und habe leider glaub ich nur noch Holzwolle im Kopf...
Sehe ich das richtig? Es lässt sich - wenn die Ausgabe von "date" nur das reine Datum beinhaltet (ohne Wochentag) nicht mal eben der Wochentag ermitteln?
Oder lässt sich das doch mit akzeptablen Aufwand machen?
Ich brauche den Wochentag (alternativ eine Tagesnummer) als Variable...
Thx Fugu
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 80546
Url: https://administrator.de/contentid/80546
Ausgedruckt am: 15.11.2024 um 01:11 Uhr
6 Kommentare
Neuester Kommentar
In dem Tutorial andem Du bist gibt es ca in der Mitte folgenden Teil:
Das ist doch was du haben willst oder?
miniversum
Beispiel Berechnung Wochentag aus einem Datum mit Bordmitteln:
Aufruf und Output wären zum Beispiel (setzen einer numerischen Wochentagsvariablen für den 2.Oktober 2005)
>getDow 2005 10 2 nWochentag
nWochentag=7
:: --- snipp GetDoW-Codeschnipsel.bat
:: Berechnet den DoW / Tag der Woche als numerischen Wert 1=Montag...7=Sonntag
:: IN-Parameter: Para 1-3 yy, mm, dd ( Jahr 2 oder 4stellig, Monat, Tag (mit/ohne führende "0" egal)
:: ..............Para 4 ist ein Variablennamen für den DoW/TachDerWoche
:: ..............Optional: Para 5 die Datumsgrenze (z.B. TwoDigitYearMax aus der REG).
::...............Mein Default (vollkommen willkürlich) 2038
:: ich mach hier KEINE Parameterüberprüfung und ähnliches, soll ja später nicht als eigenständiger Batch verwendet werden.
:: Algorithmus frei nach Batch Function Library for Windows NT4/2000/XP/2003
@echo off & Setlocal
IF [%5]== (set /a "TwoDigitYearMax=2038%%1000") Else set /a TwoDigitYearMax=%5%%1000
set yy=%1 & set mm=%2 & set dd=%3
if 1%yy% LSS 200 if 1%yy% LSS 1%TwoDigitYearMax% (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,dow=153*m+2
set /a dow=dow/5+dd+y*365+y/4-y/100+y/400-2472630,dow%%=7,dow+=1
endlocal&Set %4=%dow%&goto :EOF
:: --- snipp GetDoW-Codeschnipsel.bat
:: Berechnet den DoW / Tag der Woche als numerischen Wert 1=Montag...7=Sonntag
:: IN-Parameter: Para 1-3 yy, mm, dd ( Jahr 2 oder 4stellig, Monat, Tag (mit/ohne führende "0" egal)
:: ..............Para 4 ist ein Variablennamen für den DoW/TachDerWoche
:: ..............Optional: Para 5 die Datumsgrenze (z.B. TwoDigitYearMax aus der REG).
::...............Mein Default (vollkommen willkürlich) 2038
:: ich mach hier KEINE Parameterüberprüfung und ähnliches, soll ja später nicht als eigenständiger Batch verwendet werden.
:: Algorithmus frei nach Batch Function Library for Windows NT4/2000/XP/2003
@echo off & Setlocal
IF [%5]== (set /a "TwoDigitYearMax=2038%%1000") Else set /a TwoDigitYearMax=%5%%1000
set yy=%1 & set mm=%2 & set dd=%3
if 1%yy% LSS 200 if 1%yy% LSS 1%TwoDigitYearMax% (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,dow=153*m+2
set /a dow=dow/5+dd+y*365+y/4-y/100+y/400-2472630,dow%%=7,dow+=1
endlocal&Set %4=%dow%&goto :EOF
:: --- snipp GetDoW-Codeschnipsel.bat
Aufruf und Output wären zum Beispiel (setzen einer numerischen Wochentagsvariablen für den 2.Oktober 2005)
>getDow 2005 10 2 nWochentag
nWochentag=7
Das ist doch was du haben willst oder?
miniversum
Hier mal das ganze etwas aufbereitet:
Die Forschleife muß eventuell angepast werden, je nach dem ob %date% bei dir tt.mm.yyyy oder mm-tt-yyyy oder wie auch immer formatiert ist. Hier ist es für tt.mm.yyyy also z.B. 12.02.2008 gemacht.
%WoTa% gibt dir wie du siehst den Wochentag als Name zurück, %dow% als Tag der Woche als Zahl zwischen 1 und 7.
miniversum
@echo off
REM Hier eventuell Reihenfolge und delims anpassen
FOR /F "tokens=1,2,3 delims=." %%a in ('echo %date%') do set yy=%%c & set mm=%%b & set dd=%%a
set /a "TwoDigitYearMax=2038%%1000"
if 1%yy% LSS 200 if 1%yy% LSS 1%TwoDigitYearMax% (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,dow=153*m+2
set /a dow=dow/5+dd+y*365+y/4-y/100+y/400-2472630,dow%%=7,dow+=1
If %dow% equ 1 set "WoTa=Montag"
If %dow% equ 2 set "WoTa=Dienstag"
If %dow% equ 3 set "WoTa=Mittwoch"
If %dow% equ 4 set "WoTa=Donnerstag"
If %dow% equ 5 set "WoTa=Freitag"
If %dow% equ 6 set "WoTa=Samstag"
If %dow% equ 7 set "WoTa=Sonntag"
echo Heute ist ein %WoTa%
%WoTa% gibt dir wie du siehst den Wochentag als Name zurück, %dow% als Tag der Woche als Zahl zwischen 1 und 7.
miniversum
Moin fugu,
ich versteh das ganze Problem in mehrfacher Hinsicht überhaupt nicht.
Vielleicht bin ich damals bei dem Tut damals zu sehr abgedriftet, aber eine der zentralen Aussagen sollte gewesen sein:
Was immer im Batch/am CMD-Prompt als Datumswert angezeigt wird, es ist Prosa, Lyrik, Text - es lässt sich nicht damit rechnen.
Es ist nun mal nicht möglich, von einem Text "11.12.2007" auf den Tag der Woche, auf gestern, auf das vierte Quartal, auf den Monat Dezember zu kommen, es sei denn, dieser Zehn-Zeichen-Text wird dreisterweise als (gültiger) Datumswert unterstellt und einem Werkzeug übergeben, welches mit Datums-Datentypen umgehen kann. Z.B. VBScript.
Nochmal:
Für deinen Zweck - für Robocopy den Namen des Wochentags ermitteln, weil der Sicherungsordner so heißt - brauchst du nur Robocopy selbst.
Ausgabe:
Grüße
Biber
ich versteh das ganze Problem in mehrfacher Hinsicht überhaupt nicht.
Vielleicht bin ich damals bei dem Tut damals zu sehr abgedriftet, aber eine der zentralen Aussagen sollte gewesen sein:
Was immer im Batch/am CMD-Prompt als Datumswert angezeigt wird, es ist Prosa, Lyrik, Text - es lässt sich nicht damit rechnen.
Es ist nun mal nicht möglich, von einem Text "11.12.2007" auf den Tag der Woche, auf gestern, auf das vierte Quartal, auf den Monat Dezember zu kommen, es sei denn, dieser Zehn-Zeichen-Text wird dreisterweise als (gültiger) Datumswert unterstellt und einem Werkzeug übergeben, welches mit Datums-Datentypen umgehen kann. Z.B. VBScript.
Nochmal:
- von einer Textvariablen "12.02.2008" auf den Text "Dienstag" kommen -----> geht eigentlich nicht.
- von einem Datumswert 12.02.2008 auf den Text "Dienstag" zu kommen -->geht. Aber nur in einem Universum, in dem es den Datentyp "Datum" gibt. Also jenseits der CMD.exe.
Für deinen Zweck - für Robocopy den Namen des Wochentags ermitteln, weil der Sicherungsordner so heißt - brauchst du nur Robocopy selbst.
::--- GetWochentagViaRobocopy.cmd
@echo off & setlocal
REM Der Befehl "robocopy /?|find "Started" " gibt eine Zeile dieser Form zurück:
REM Started : Tue Feb 12 22:10:06 2008
REM
for /f "tokens=3" %%i in ('robocopy /?^|find "Started"') do (
IF "%%i" == "Mon" set "woTag=Montag"
IF "%%i" == "Tue" set "woTag=Dienstag"
IF "%%i" == "Wed" set "woTag=Mittwoch"
IF "%%i" == "Thu" set "woTag=Donnerstag"
IF "%%i" == "Fri" set "woTag=Freitag"
IF "%%i" == "Sat" set "woTag=Samstag"
IF "%%i" == "Sun" set "woTag=Sonntag"
)
Echo Wochentag laut Robocopy ist [%woTag%]
Ausgabe:
>getWochentagViaRobocopy.cmd
Wochentag laut Robocopy ist [Dienstag]
Grüße
Biber